|
@@ -135,37 +135,71 @@ 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
|
|
|
}
|
|
|
|
|
|
func DeleteEdbClassify(classifyId int) (err error) {
|
|
|
- sql := ` DELETE FROM edb_classify
|
|
|
- WHERE 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
|
|
|
- ) `
|
|
|
- err = global.DmSQL["data"].Exec(sql, classifyId).Error
|
|
|
+ //sql := ` DELETE FROM edb_classify
|
|
|
+ // WHERE 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 ClassifyHierarchy ( classify_id, parent_id ) AS
|
|
|
+ (
|
|
|
+ SELECT classify_id,
|
|
|
+ parent_id
|
|
|
+ FROM edb_classify
|
|
|
+ WHERE parent_id = ? OR classify_id=?
|
|
|
+ UNION ALL
|
|
|
+ SELECT e.classify_id,
|
|
|
+ e.parent_id
|
|
|
+ FROM edb_classify e
|
|
|
+ INNER JOIN ClassifyHierarchy ch
|
|
|
+ ON e.parent_id = ch.classify_id
|
|
|
+ )
|
|
|
+DELETE
|
|
|
+ FROM edb_classify
|
|
|
+ WHERE classify_id IN ( SELECT classify_id
|
|
|
+ FROM ClassifyHierarchy
|
|
|
+ );`
|
|
|
+ err = global.DmSQL["data"].Exec(sql, classifyId, classifyId).Error
|
|
|
|
|
|
return
|
|
|
}
|
|
@@ -333,15 +367,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
|