0

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

我正在尝试从递归查询中获取所有最后一个元素,但是要花很多时间才能继续进行是否有更好的方法来做到这一点我到底在做什么

假设我有一张像

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,%'
) 

这对我有用

4

2 回答 2

0

假设您使用的是 MySQL,最好的办法是使用闭包表。如果您使用不同的数据库(例如:PostgreSQL),您可能会执行递归查询,允许数据库处理递归而不是您的代码。

于 2013-05-07T10:42:43.790 回答
0

在 Mysql 中你不能得到这种选择。

在 Oracle 中是可能的。

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

问候

于 2013-05-07T10:48:29.483 回答