我想检索给定父级的所有子级(以及可选的级别深度)。另外,如果可能的话,我想在单个查询或存储过程中获取它。
像Mark Byers这样的this solution,只是反方向。
我的表结构是这样的:
id parent
1 0
2 1
3 0
4 1
5 2
6 5
7 2
8 4
所以我希望孩子们能得到1:
+2
++5
+++6
++7
+4
++8
如果想要孩子2,我会得到:
++5
+++6
++7
如果想要孩子4岁,我会得到:
+8
提前致谢!
编辑1:嵌套集模型对我不好
答案 0 :(得分:0)
一个建议是抛弃这个邻接模型并将结构更改为嵌套集。嵌套集非常适合快速选择,并且不需要任何递归结构。然而它确实带来了价格,插入,更新和删除更加痛苦。我刚刚在这篇文章上写了blog帖子,它基于MsSql,但它很容易移植到MySql。谷歌还throws up发了一些好帖。
另一个建议是从数据库加载所有行,然后在前端代码中编写递归方法并缓存输出。如果我的表中只有几百行,我会使用这种方法。
答案 1 :(得分:-3)
以下Query将为您提供MySQL中表的所有子表。
将数据库名称和表名称作为参数
SELECT TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
REFERENCED_TABLE_SCHEMA = "database"
AND REFERENCED_TABLE_NAME = "table";