MYSQL-在嵌套模型集中查找所有父\u id
MYSQL版本:5.7.33 我基于以下内容实现了嵌套集模型概念: 以下是数据:MYSQL-在嵌套模型集中查找所有父\u id,mysql,Mysql,MYSQL版本:5.7.33 我基于以下内容实现了嵌套集模型概念: 以下是数据: +----+------+------+------+------+-------------------------------------+--------+------------------+ | id | lft | rgt | lvl | root | name | code | header_or_detail | +----+-
+----+------+------+------+------+-------------------------------------+--------+------------------+
| id | lft | rgt | lvl | root | name | code | header_or_detail |
+----+------+------+------+------+-------------------------------------+--------+------------------+
| 1 | 1 | 2761 | 0 | 1 | AKTIVA | 1 | 0 |
| 2 | 2 | 2281 | 1 | 1 | AKTIVA LANCAR | 11 | 0 |
| 3 | 3 | 62 | 2 | 1 | KAS TUNAI | 1101 | 0 |
| 4 | 4 | 5 | 3 | 1 | Kas Kecil Rupiah | 110101 | 1 |
| 5 | 6 | 7 | 3 | 1 | Kas Kecil Rupiah | 110101 | 1 |
| 6 | 8 | 9 | 3 | 1 | Kas Kecil Rupiah | 110101 | 1 |
| 7 | 10 | 11 | 3 | 1 | Kas Kecil Rupiah | 110101 | 1 |
| 8 | 12 | 13 | 3 | 1 | Kas Kecil Rupiah | 110101 | 1 |
| 9 | 14 | 15 | 3 | 1 | Kas Kecil Rupiah | 110101 | 1 |
| 10 | 16 | 17 | 3 | 1 | Kas Kecil Rupiah | 110101 | 1 |
| 11 | 18 | 19 | 3 | 1 | Kas Kecil Rupiah | 110101 | 1 |
| 12 | 20 | 21 | 3 | 1 | Kas Kecil Rupiah | 110101 | 1 |
| 13 | 22 | 23 | 3 | 1 | Kas Kecil Rupiah | 110101 | 1 |
| 14 | 24 | 25 | 3 | 1 | Kas Tunai USD | 110102 | 1 |
| 15 | 26 | 27 | 3 | 1 | Kas Tunai USD | 110102 | 1 |
| 16 | 28 | 29 | 3 | 1 | Kas Tunai USD | 110102 | 1 |
| 17 | 30 | 31 | 3 | 1 | Kas Tunai USD | 110102 | 1 |
| 18 | 32 | 33 | 3 | 1 | Kas Tunai USD | 110102 | 1 |
| 19 | 34 | 35 | 3 | 1 | Kas Tunai USD | 110102 | 1 |
| 20 | 36 | 37 | 3 | 1 | Kas Tunai USD | 110102 | 1 |
| 21 | 38 | 39 | 3 | 1 | Kas Tunai USD | 110102 | 1 |
| 22 | 40 | 41 | 3 | 1 | Kas Tunai USD | 110102 | 1 |
| 23 | 42 | 43 | 3 | 1 | Kas Tunai USD | 110102 | 1 |
| 24 | 44 | 45 | 3 | 1 | Kas Tunai Dibrankas | 110103 | 1 |
| 25 | 46 | 47 | 3 | 1 | Kas Tunai Dibrankas | 110103 | 1 |
| 26 | 48 | 49 | 3 | 1 | Kas Tunai Dibrankas | 110103 | 1 |
| 27 | 50 | 51 | 3 | 1 | Kas Tunai Dibrankas | 110103 | 1 |
| 28 | 52 | 53 | 3 | 1 | Kas Tunai Dibrankas | 110103 | 1 |
| 29 | 54 | 55 | 3 | 1 | Kas Tunai Dibrankas | 110103 | 1 |
| 30 | 56 | 57 | 3 | 1 | Kas Tunai Dibrankas | 110103 | 1 |
| 31 | 58 | 59 | 3 | 1 | Kas Tunai Dibrankas | 110103 | 1 |
| 32 | 60 | 61 | 3 | 1 | Kas Tunai USD (EL) | 110104 | 1 |
| 33 | 63 | 216 | 2 | 1 | KAS DI BANK | 1102 | 0 |
| 34 | 64 | 65 | 3 | 1 | Bank BCA-GMD RPH TS | 110201 | 1 |
| 35 | 66 | 67 | 3 | 1 | Bank BCA-VETERAN RPH TS | 110201 | 1 |
| 36 | 68 | 69 | 3 | 1 | Bank BCA-PEMUDA RPH TS | 110201 | 1 |
+----+------+------+------+------+-------------------------------------+--------+------------------+
36 rows in set (0.01 sec)
我的目标是,我希望每个记录都有一个父id列。
这里我只显示36行,但在实际数据库中有1374行
我正在使用一个查询,使用一个带有子查询的查询来获取父\u id,如下所示
SELECT COALESCE((
SELECT GROUP_CONCAT(DISTINCT parent.id)
FROM chart_of_account AS parent
WHERE ((parent.lft < (node.lft)) AND (parent.rgt > (node.rgt))) AND (parent.root = node.root)
GROUP BY parent.root ), node.root) AS parent_id ,
node.id
, node.lft
, node.rgt
, node.lvl
, node.root
, CONCAT(REPEAT(' ', `node`.lvl * 4), `node`.name) AS name
, node.code
, node.header_or_detail
FROM chart_of_account AS node
WHERE root = 1
ORDER BY root, lft
如果使用子查询,则获取1.374行需要4.2秒。
还有别的办法吗
以下是解释:
Plain Text Explain
+----+--------------------+--------+------+---------------+-----+---------+-----+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | extra |
+----+--------------------+--------+------+---------------+-----+---------+-----+------+-------+
| 1 | PRIMARY | node | | ALL | | | | | 5598 |
| 2 | DEPENDENT SUBQUERY | parent | | ALL | | | | | 5598 |
+----+--------------------+--------+------+---------------+-----+---------+-----+------+-------+
我实现了嵌套集模型的概念,为什么这样做?目标是什么?你真的需要嵌套集合吗?也许完全限定的节点路径更有用?对于Akina,请参阅复式簿记会计系统中的科目表:您必须在根、lft和rgt上创建一个索引。那么你的查询速度就更快了
Plain Text Explain
+----+--------------------+--------+------+---------------+-----+---------+-----+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | extra |
+----+--------------------+--------+------+---------------+-----+---------+-----+------+-------+
| 1 | PRIMARY | node | | ALL | | | | | 5598 |
| 2 | DEPENDENT SUBQUERY | parent | | ALL | | | | | 5598 |
+----+--------------------+--------+------+---------------+-----+---------+-----+------+-------+