繁体   English   中英

使用mysql获取树的所有叶元素

[英]Get all leaf elemnts of a tree using mysql

这是我在此博客上的第一篇文章,请帮助我

我正在尝试从递归查询中获取所有最后一个元素,但是要花更多的时间才能完成我真正在做的事情吗

假设我有一张桌子

ID      ParentId
1       0
2       1
3       1
4       1
5       2
6       2
7       3
8       4

对于Id 1,我想得到5,6,7,8,因为您可以看到5,6,7,8的父母是1的孩子,同样地Id 2 o / p必须是5和6。最佳解决方案。 我的意思是除了重复运行查询以获取子元素以外的其他事情


为了解决MySQL中的问题,我添加了一个附加字段“ allParent”,其中包含当前类别的逗号分隔ID(我的示例现在是该表)

ID      ParentID      allParent
1       0             0
2       1             0,1
3       1             0,1
4       1             0,1
5       2             0,1,2
6       2             0,1,2
7       3             0,1,3
8       4             0,1,4

现在,获取所有叶级实体的查询将是

Select * from table where (
    allParent LIKE '1,%' or 
    allParent LIKE ',1%' or 
    allParent LIKE '%,1,%'
) and ID NOT IN (
    Select ParentId from table where
    allParent LIKE '1,%' or 
    allParent LIKE ',1%' or 
    allParent LIKE '%,1,%'
) 

这对我有用

假设您使用的是MySQL,最好的选择是使用闭包表 如果使用其他数据库(例如PostgreSQL),则可以执行递归查询,使数据库可以处理递归而不是代码。

在Mysql中,您无法获得这种选择。

在Oracle中是可能的。

在这种特定情况下,执行此操作的唯一方法是将左联接嵌套为您拥有的级别数。

问候

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM