1

我有这样的结构:

  • A(根节点)有两个孩子B(左孩子)和C(右孩子)。
  • 同样B也有两个节点D(左孩子)和E(右孩子)。
  • 同样C也有两个节点F(left child),G(right child)这样一个。

我的查询是:

  • 如果我输入A(根节点),它会显示所有子节点在下面,输出是A这样B的,,,,,,,,,CDEFG
  • 同样,如果我输入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

有谁能够帮我?

4

2 回答 2

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模型。

于 2013-03-17T18:12:15.187 回答
0

您应该引入两个额外的字段lftrgt,并为使用这两个列的表使用嵌套树模型。

解释此设置和使用的示例文档在这里

这将允许您更有效地进行这些类型的查询。

例如,要获得整个树,您只需查询所有lft大于根的节点,以及小于根的节点rgt

于 2013-03-17T18:12:39.403 回答