2013-03-17 45 views
1

我有這樣一個結構中的所有節點和我的SQL:如何以檢索使用PHP根節點的

  • A(根節點)有兩個孩子B(左子)和C(右子) 。
  • 同樣B也有兩個節點D(左孩子)和E(右孩子)。
  • 同樣C還有兩個節點F(左孩子),G(右孩子)像這樣一個。

我的查詢是:

  • 如果我輸入A(根節點)的,它會顯示所有的子節點是A下,該出來說就是這樣BCDEFG
  • 同樣的,如果我輸入B然後將放出來會是這樣DE

我的第二個疑問是,如果我輸入A那麼它會顯示哪個是他的左孩子以及右孩子。

我的表結構是這樣的

id  c_n  p_n 

1  B  A 

2  C  A 

3  D  B 

4  E  B 

像等。

這裏有三個字段,一個是id,c_n,p_n

任何機構可以幫助我嗎?

回答

0

鑑於當前的模式,下面就以逗號分隔字符串拉子節點從1級或2級層次結構(有條件)的,按你的要求

SELECT 
    CONCAT(
     GROUP_CONCAT(t1.c_n), 
     IF(COUNT(t2.c_n), ',', ''), 
     GROUP_CONCAT(t2.c_n) 
    ) AS nodex 
FROM table_name AS t1 
LEFT JOIN table_name AS t2 ON t1.c_n = t2.p_n 
WHERE t1.p_n = 'A' 
GROUP BY t1.p_n 

但是,你應該考慮切換到nested set簡單和選擇速度的模型。

0

您應該引入兩個附加字段,lftrgt,併爲使用這兩列的表使用嵌套樹模型。

解釋此設置和使用的示例文檔是here

這將允許您更有效地進行這些查詢。

例如,要獲得整棵樹,那麼您只需查詢所有節點誰的lft大於根,而誰的rgt較小。