2017-01-28 38 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

如果您想獲取父母的所有孩子以及他們的孩子等,此查詢很有用。或者簡單地說我們可以說這對於獲得遞歸數據很有用 –