【发布时间】:2014-03-04 10:27:29
【问题描述】:
我有下表:
id | parent_id | searchable | value
--------------------------------------------
1 | 0 | 0 | a
2 | 1 | 0 | b
3 | 2 | 1 | c
4 | 0 | 0 | d
5 | 4 | 1 | e
6 | 0 | 0 | f
7 | 6 | 0 | g
8 | 6 | 0 | h
9 | 0 | 1 | i
我需要提取所有顶级记录(所以是parent_id = 0 所在的记录)。
但只有父母或他的一个孩子的记录是可搜索的 (searchable = 1)
所以在这种情况下,输出应该是:
id | parent_id | searchable | value
--------------------------------------------
1 | 0 | 0 | a
4 | 0 | 0 | d
9 | 0 | 1 | i
因为这些都是顶级记录,并且它自己或他的一个孩子(不管可搜索的孩子有多“深”)都是可搜索的。
我正在使用 MySQL。我不确定是否可以只用一个查询来编写它,但我认为应该用一段递归代码或一个函数来完成。
** 注意:不知道树有多“深”。
【问题讨论】:
-
我已阅读标记为正确答案的文章,但我没有在其中找到我的答案。对于我正在使用的这个应用,使用左右列的嵌套集合模型效率很低
-
您需要更改数据模型、编写存储过程或在应用程序中进行递归。对于 MySQL 的有限功能,您别无选择。它可以不通过单个查询来完成,因为 MySQL 缺乏执行递归查询的能力
标签: mysql sql recursive-query