2012-03-14 72 views
0

我想从一个给定的父母(和可选的他们的级别深度)检索所有的孩子。另外,如果可能的话,我想在单个查询或存储过程中获得它。从一个给定的父母在mysql中获取所有的孩子

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

其中rü从得到1,4?我的意思是这山坳乌尔指.. – Teja 2012-03-14 20:03:20

+0

@SOaddict这就是ID山坳 – 2013-05-10 20:30:13

+0

这个链接http://stackoverflow.com/questions/16391660/retrieve-hierarchy-from-a-table-like-this/16392049#16392049尝试 – Meherzad 2013-05-10 20:35:30

回答

0

一个建议是沟壑邻接模式和改变你的结构,一组嵌套。嵌套集非常适合快速选择,并且不需要任何递归结构。然而它确实带有价格,插入,更新和删除更加痛苦。我前一阵子写了一篇blog的文章,它基于MsSql,但很容易移植到MySql。谷歌也throws up一些很好的帖子。

另一个建议是加载数据库中的所有行,然后在前端代码中编写递归方法并缓存输出。如果我的表中只有几百行,我使用这种方法。

+0

感谢的,但嵌套组是没有好 – 2013-05-10 20:34:05

+1

在我看来,嵌套集合是一个贫穷的替代方法如果使用的DBMS不支持递归查询是只需要。 – 2013-05-10 21:13:43

+0

取决于很多因素,如果你真的与性能有关,你有一个大的记录,然后IMO嵌套组手中夺了下来。它绝对不是一个糟糕的解决方法。 – Rippo 2013-05-11 09:27:27

-3

以下查询会给大家在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"; 
相关问题