genlong 6 月之前
父節點
當前提交
9ba0233381
共有 1 個文件被更改,包括 51 次插入21 次删除
  1. 51 21
      models/data_manage/edb_classify.go

+ 51 - 21
models/data_manage/edb_classify.go

@@ -135,18 +135,33 @@ type DeleteEdbClassifyReq struct {
 
 // TODO: sql优化,后续解决
 func GetEdbInfoCountByClassifyId(classifyId int) (count int, err error) {
-	sql := ` SELECT COUNT(1) AS count FROM edb_info AS a
-				WHERE a.classify_id IN(
-				SELECT t.classify_id FROM 
-				(
-				SELECT rd.*
-				FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
-					 (SELECT @pid := ?) pd 
-				WHERE FIND_IN_SET(parent_id, @pid) > 0 
-				  AND @pid := CONCAT(@pid, ',', classify_id) 
-				UNION SELECT * FROM edb_classify WHERE classify_id = @pid
-				)AS t
-				) `
+	//sql := ` SELECT COUNT(1) AS count FROM edb_info AS a
+	//			WHERE a.classify_id IN(
+	//			SELECT t.classify_id FROM
+	//			(
+	//			SELECT rd.*
+	//			FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
+	//				 (SELECT @pid := ?) pd
+	//			WHERE FIND_IN_SET(parent_id, @pid) > 0
+	//			  AND @pid := CONCAT(@pid, ',', classify_id)
+	//			UNION SELECT * FROM edb_classify WHERE classify_id = @pid
+	//			)AS t
+	//			) `
+
+	sql := `WITH RECURSIVE classify_cte(classify_id, parent_id) AS (
+    SELECT classify_id, parent_id  
+    FROM edb_classify  
+    WHERE parent_id = ?
+  
+    UNION ALL  
+
+    SELECT e.classify_id, e.parent_id  
+    FROM edb_classify e  
+    INNER JOIN classify_cte c ON e.parent_id = c.classify_id  
+)  
+SELECT COUNT(1) AS COUNT  
+FROM edb_info AS a  
+WHERE a.classify_id IN (SELECT classify_id FROM classify_cte);`
 	err = global.DmSQL["data"].Raw(sql, classifyId).Scan(&count).Error
 
 	return
@@ -333,15 +348,30 @@ type ClassifyDeleteCheckReq struct {
 
 func GetClassifyCountByClassifyId(classifyId int) (count int, err error) {
 	o := global.DmSQL["data"]
-	sql := ` SELECT COUNT(1) AS count FROM (
-			SELECT rd.*
-			FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
-				 (SELECT @pid := ?) pd 
-			WHERE FIND_IN_SET(parent_id, @pid) > 0 
-			  AND @pid := CONCAT(@pid, ',', classify_id) 
-			UNION SELECT * FROM edb_classify WHERE classify_id = @pid
-			)AS t
-			WHERE t.classify_id<>? `
+	//sql := ` SELECT COUNT(1) AS count FROM (
+	//		SELECT rd.*
+	//		FROM (SELECT * FROM edb_classify WHERE parent_id IS NOT NULL) rd,
+	//			 (SELECT @pid := ?) pd
+	//		WHERE FIND_IN_SET(parent_id, @pid) > 0
+	//		  AND @pid := CONCAT(@pid, ',', classify_id)
+	//		UNION SELECT * FROM edb_classify WHERE classify_id = @pid
+	//		)AS t
+	//		WHERE t.classify_id<>? `
+
+	sql := `WITH RECURSIVE classify_cte(classify_id, parent_id) AS (  
+  SELECT classify_id, parent_id  
+  FROM edb_classify  
+  WHERE parent_id = ?  
+  
+  UNION ALL  
+  
+  SELECT e.classify_id, e.parent_id  
+  FROM edb_classify e  
+  INNER JOIN classify_cte c ON e.parent_id = c.classify_id  
+)  
+SELECT COUNT(1) AS COUNT  
+FROM classify_cte  
+WHERE classify_id <> ? ;`
 	err = o.Raw(sql, classifyId, classifyId).Scan(&count).Error
 
 	return