[英]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.