2017-01-28 31 views
2

我使用MySQL的递归查询找到LV 2和LV3的孩子在一个表上有这样的情况下...
数据库结构,我使用:
MySQL的递归获得所有子从父

id name parent 
1 A 0 
2 B 0 
3 C 0 
4 D 1 
5 E 1 
6 F 2 
7 G 2 
8 H 3 
9 I 3 
10 J 4 
11 K 4 

的结果我期待,当过滤数据,其中id = 1,它会产生我期待的结果。

id name parent 
4 D  1 
5 E  1 
10 J  4 
11 K  4 

或这是插图。 Illustration

我一直在到处找,而阅读本http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/,but我没有找到结果,我一直在寻找..
任何帮助将appriciated,感谢

+0

插入您的表名称,并且您链接的页面不存在 – Ollaw

回答

0
SELECT * 
FROM TABLENAME 
WHERE PARENT = 1 
UNION 
SELECT * 
FROM TABLENAME 
WHERE PARENT IN 
    (SELECT ID FROM TABLENAME WHERE PARENT = 1) 
+0

那很快,谢谢..我使用相同的quey,但似乎我写错了关于哪里父母IN(SELECT ID FROM TABLENAME,其中父母= 1)。 @Ollaw –

0

试试这个,要快得多

SELECT * FROM table AS T1 INNER JOIN (SELECT id FROM table WHERE parent = 1) AS T2 ON T2.id = T1.parent OR T1.parent = 1 GROUP BY T1.id 
6

如果你想得到一个特定的父母的所有级别的孩子,那么你应该试试这个

select id, 
     name, 
     parent 
from (select * from tablename 
     order by parent, id) tablename, 
     (select @pv := '1') initialisation 
where find_in_set(parent, @pv) > 0 
and  @pv := concat(@pv, ',', id) 
+0

请解释你的代码段。只是一段代码对用户来说不会有多大帮助。 – Billa

+0

如果您想获取父母的所有孩子以及他们的孩子等,此查询很有用。或者简单地说我们可以说这对于获得递归数据很有用 –