2013-03-25 53 views
-1

我有這樣樹的遍歷用於獲取節點數組

 2 
/| \ 
    3 4 6 
    /\ 
    7 8 
     \ 
      9 

在db表一棵樹看起來像這樣

node_id parent_id 
     2  0 
     3  2 
     4  2 
     6  2 
     7  4 
     8  4 
     9  8 

的問題是,如果我通過4節點ID爲函數,返回值應該是以7,8和9(表示4以下的所有節點)的數組(或逗號分隔)。我試過遞歸函數,但沒有得到我真正期望的。請建議在PHP

+1

你試過了什麼?附:歡迎來到Stack – George 2013-03-25 10:12:48

+0

我試過遞歸函數,但問題是我沒有從什麼地方返回數組。 – Shafeeque 2013-03-25 10:20:52

回答

2

你可以看一下這篇文章的一些可能的方式:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/(最初它是根據mysql.com出版,但後來刪除)

爲你的數據,你可以嘗試類似以下內容:

CREATE TABLE `tree` (node_id INT NOT NULL, 
parent_id INT NOT NULL); 

INSERT INTO `tree`(node_id, parent_id) VALUES(2,0), 
(3,2), 
(4,2), 
(6,2), 
(7,4), 
(8,4), 
(9,8); 


SELECT t1.node_id AS lev1, t2.node_id AS lev2, t3.node_id AS lev3, t4.node_id AS lev4 
FROM tree AS t1 
LEFT JOIN tree AS t2 ON t2.parent_id = t1.node_id 
LEFT JOIN tree AS t3 ON t3.parent_id = t2.node_id 
LEFT JOIN tree AS t4 ON t4.parent_id = t3.node_id 
WHERE t1.node_id = 4; 
+0

感謝您的回覆。答案不會導致我期望的結果。會有很多節點。手動LEFT JOIN不起作用。 – Shafeeque 2013-03-25 10:34:41

+0

那麼你可以向下滾動我寄給你的文章並閱讀關於嵌套集的文章?這意味着你應該改變你存儲樹的方式爲嵌套集,然後你最終在一個基本查詢中檢索子樹 – Alexey 2013-03-25 10:38:56

+0

我有另一種方法來解決這個問題。使用相同的表,在PHP中,我寫了函數(遞歸),它將節點推送到一個數組。 – Shafeeque 2013-03-25 11:06:04