2016-11-17 77 views
-1

我有這樣的一個表:如何獲得子樹表在PHP

id title  parent_id 
1  A   0 
2  B   0 
3  C   1 
4  F   3 
5  O   3 
6  D   2 
7  J   6 
8  T   2 
9  P   8 


A 
    C 
     F 
     O 

B 
    D 
    J 
    T 
    P 

現在,如果我給2,這個功能應該返回:

6 
8 
7 
9 

而且,如果我給3它函數返回:

4 
5 
  • 我不想只是葉子節點!
  • 我認爲有一個SQL查詢。
+1

有類似的問題,並很好的答案在這裏:http://stackoverflow.com/questions/2915748/convert-a-series-of-parent-child-relationships-into-一個分層樹。 然後這可能是一個重複的問題。 – niklaz

回答

0

只是SQL:

select id, 
     title, 
     parent_id 
from (select * from products 
     order by parent_id, id) base, 
     (select @pv := '3') tmp 
where find_in_set(parent_id, @pv) > 0 
and  @pv := concat(@pv, ',', id) 
0

我認爲你需要與自己連接表。我沒有自己嘗試,但它是像下面的代碼

SELECT a.id, a.title 
FROM tbl AS a 
WHERE a.id = :id 

UNION 

SELECT b.id, b.title 
FROM tbl AS a 
INNER JOIN tbl AS b ON a.id = b.parent_id 
WHERE a.id = :id 

UNION 

SELECT c.id, c.title 
FROM tbl AS a 
INNER JOIN tbl AS b ON a.id = b.parent_id 
INNER JOIN tbl AS c ON b.id = c.parent_id 
WHERE a.id = :id 

UNION 

SELECT d.id, d.title 
FROM tbl AS a 
INNER JOIN tbl AS b ON a.id = b.parent_id 
INNER JOIN tbl AS c ON b.id = c.parent_id 
INNER JOIN tbl AS d ON c.id = d.parent_id 
WHERE a.id = :id 

... 

繼續添加查詢,直到你需要的深度數。還有其他方法,例如使用存儲過程。

+0

我認爲這不是一個好主意。因爲如果我想獲取深度50?和'深度'不可用! –

+0

我相信如果沒有父子關係內連接只是返回沒有結果集。然而,越深入越需要更多的資源 –