gpt4 book ai didi

mysql - 如何找到树表示的层次结构路径

转载 作者:可可西里 更新时间:2023-11-01 06:32:27 26 4
gpt4 key购买 nike

我有一个树状层次结构,它内置在一个表中,其中 parent_id 指向前一个根节点。

我正在遍历所有根节点(root1、root2),并为 root1 和 child1 设置指向 root1 或 root1/child1 的路径。为了找到 child1 的路径,我必须至少进行 2 次调用才能形成路径。有没有一种有效的方法来填充路径,因为我们要处理大量嵌套 5-7 层的根节点和子节点。

create table foo (id, name, parent_id, path)
insert into foo (1, "root1', null, null)
insert into foo (2, "child1', 1, null)

root1 (path = null)
child1 (path = root1)
subchild1 (path = root1/child1)

root2
child2
subchild2

最佳答案

您可以使用您在问题中提到的存储过程,因为嵌套最多可达 7 层。

存储过程

CREATE PROCEDURE updatePath()
BEGIN
declare cnt, n int;
select count(*) into n from foo where parent_id is null;
update foo a, foo b set a.path = b.name where b.parent_id is null and a.parent_id = b.id;
select count(*) into cnt from foo where path is null;
while cnt > n do
update foo a, foo b set a.path = concat(b.path, '/', b.name) where b.path is not null and a.parent_id = b.id;
select count(*) into cnt from foo where path is null;
end while;
END//

为了检查实际记录,我们刚刚在路径列中打印了具有空值的普通记录

select * from foo

结果:

| ID |         NAME | PARENT_ID |   PATH |
------------------------------------------
| 1 | root1 | (null) | (null) |
| 2 | child1 | 1 | (null) |
| 3 | subchild1 | 2 | (null) |
| 4 | child2 | 1 | (null) |
| 5 | child3 | 1 | (null) |
| 6 | subchild2 | 4 | (null) |
| 7 | subsubchild1 | 6 | (null) |

调用过程:

call updatepath

程序执行后的结果:

select * from foo

结果:

| ID |         NAME | PARENT_ID |                   PATH |
----------------------------------------------------------
| 1 | root1 | (null) | (null) |
| 2 | child1 | 1 | root1 |
| 3 | subchild1 | 2 | root1/child1 |
| 4 | child2 | 1 | root1 |
| 5 | child3 | 1 | root1 |
| 6 | subchild2 | 4 | root1/child2 |
| 7 | subsubchild1 | 6 | root1/child2/subchild2 |

SQLFIDDLE

希望这对您有所帮助....

关于mysql - 如何找到树表示的层次结构路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15584013/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com