获取mysql中给定父级的所有子级

时间:2012-03-14 20:00:55

标签: mysql sql hierarchical-data

我想检索给定父级的所有子级(以及可选的级别深度)。另外,如果可能的话,我想在单个查询或存储过程中获取它。

像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:嵌套集模型对我不好

2 个答案:

答案 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";