使用嵌套集模型对管理 MySQL 中的分层数据中的所有叶节点进行分组

问题描述

我实现了 Nested Set model。所以,我有以下查询。

SELECT location_id,parent_id,id,root,lft,rgt,account_type_id,account_type_name,name,code
FROM (
         SELECT l.id                                               as location_id,COALESCE((
                             SELECT GROUP_CONCAT(DISTINCT parent.id)
                             FROM chart_of_account as parent
                             WHERE ((parent.lft < (child.lft)) AND (parent.rgt > (child.rgt)))
                               AND (parent.root = child.root)
                             GROUP BY parent.root
                         ),child.root)                            AS parent_id,child.id,child.lft,child.rgt,child.lvl,child.root,CONCAT(REPEAT(' ',`child`.lvl * 4),`child`.name) AS name,child.code,a.name                                             as account_type_name,a.id                                               as account_type_id

         FROM chart_of_account AS child
                  LEFT JOIN account_type a on child.account_type_id = a.id
                  LEFT JOIN location l on child.location_id = l.id
         WHERE root = '1'
         ORDER BY root,lft
     ) AS `grouping`

ORDER BY root,lft
LIMIT 35;

结果:

location_id parent_id id lft rgt account_type_id account_type_name 姓名 代码
NULL 1 1 1 1 2761 30 Aktiva AKTIVA 1
NULL 1 2 1 2 2281 40 Aktiva Lancar AKTIVA LANCAR 11
NULL 1,2 3 1 3 62 41 Kas & Bank KAS TUNAI 1101
1 1,2,3 4 1 4 5 42 卡斯 Kas Kecil Rupiah 110101
2 1,3 5 1 6 7 42 卡斯 Kas Kecil Rupiah 110101
3 1,3 6 1 8 9 42 卡斯 Kas Kecil Rupiah 110101
4 1,3 7 1 10 11 42 卡斯 Kas Kecil Rupiah 110101
5 1,3 8 1 12 13 42 卡斯 Kas Kecil Rupiah 110101
6 1,3 9 1 14 15 42 卡斯 Kas Kecil Rupiah 110101
7 1,3 10 1 16 17 42 卡斯 Kas Kecil Rupiah 110101
8 1,3 11 1 18 19 42 卡斯 Kas Kecil Rupiah 110101
9 1,3 12 1 20 21 42 卡斯 Kas Kecil Rupiah 110101
10 1,3 13 1 22 23 42 卡斯 Kas Kecil Rupiah 110101
1 1,3 14 1 24 25 43 卡斯图奈美元 卡斯图奈美元 110102
2 1,3 15 1 26 27 43 卡斯图奈美元 卡斯图奈美元 110102
3 1,3 16 1 28 29 43 卡斯图奈美元 卡斯图奈美元 110102
4 1,3 17 1 30 31 43 卡斯图奈美元 卡斯图奈美元 110102
5 1,3 18 1 32 33 43 卡斯图奈美元 卡斯图奈美元 110102
6 1,3 19 1 34 35 43 卡斯图奈美元 卡斯图奈美元 110102
7 1,3 20 1 36 37 43 卡斯图奈美元 卡斯图奈美元 110102
8 1,3 21 1 38 39 43 卡斯图奈美元 卡斯图奈美元 110102
9 1,3 22 1 40 41 43 卡斯图奈美元 卡斯图奈美元 110102
10 1,3 23 1 42 43 43 卡斯图奈美元 卡斯图奈美元 110102
1 1,3 24 1 44 45 44 Kas Tunai Di Brankas 卡斯图奈迪布兰卡斯 110103
2 1,3 25 1 46 47 44 Kas Tunai Di Brankas 卡斯图奈迪布兰卡斯 110103
3 1,3 26 1 48 49 44 Kas Tunai Di Brankas 卡斯图奈迪布兰卡斯 110103
4 1,3 27 1 50 51 44 Kas Tunai Di Brankas 卡斯图奈迪布兰卡斯 110103
7 1,3 28 1 52 53 44 Kas Tunai Di Brankas 卡斯图奈迪布兰卡斯 110103
8 1,3 29 1 54 55 44 Kas Tunai Di Brankas 卡斯图奈迪布兰卡斯 110103
9 1,3 30 1 56 57 44 Kas Tunai Di Brankas 卡斯图奈迪布兰卡斯 110103
10 1,3 31 1 58 59 44 Kas Tunai Di Brankas 卡斯图奈迪布兰卡斯 110103
2 1,3 32 1 60 61 43 卡斯图奈美元 卡斯图奈美元 (EL) 110104
NULL 1,2 33 1 63 216 41 Kas & Bank KAS DI 银行 1102
1 1,33 34 1 64 65 46 银行 银行 BCA-GMD RPH TS 110201
2 1,33 35 1 66 67 46 银行 银行 BCA-VETERAN RPH TS 110201

我想要实现的目标是,我想按如下方式对所有叶节点进行分组。

location_id parent_id id account_type_id account_type_name 姓名 代码
NULL 1 1 30 Aktiva AKTIVA 1
NULL 1 2 40 Aktiva Lancar AKTIVA LANCAR 11
NULL 1,2 3 41 Kas & Bank KAS TUNAI 1101
1 1,3 4,5,6,7...13 42 卡斯 Kas Kecil Rupiah 110101
1 1,3 14,15,16,..42,32 43 卡斯图奈美元 卡斯图奈美元 110102,110104
1 1,3 24,25,26,..31 44 Kas Tunai Di Brankas 卡斯图奈迪布兰卡斯 110103
NULL 1,2 33 41 Kas & Bank KAS DI 银行 1102
1 1,33 34,35 46 银行 银行 BCA-GMD RPH TS,银行 BCA-VETERAN RPH TS 110201

我尝试了几种使用GROUP BY HAVING的方法,但仍然不适合。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...