2013-03-17 43 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较小。