【发布时间】:2013-12-19 12:39:50
【问题描述】:
这是我在这个博客上的第一篇文章,请帮助我
我正在尝试从递归查询中获取所有最后一个元素,但是要花很多时间才能继续进行是否有更好的方法来做到这一点,而我正在做的是
假设我有一张这样的桌子
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,%'
)
这对我有用
【问题讨论】:
-
我会尝试在此表的任何记录中的 ParentId 列中获取 ID 不存在的所有元素(我希望你明白我想说的:P)。
-
好吧,但是我想从特定级别获得结果,例如,如果我想获得具有 parentId = 2 的叶节点元素该怎么办
标签: mysql optimization recursion query-optimization