我有这样的结构:
A
(根节点)有两个子B
(左子)和C
(右子)。 B
还有两个节点D
(左子节点)和E
(右子节点)。 C
还有两个节点F
(左子节点),G
(右子节点),就像这样一个节点。 我的疑问是:
A
(根节点),它将显示A
下的所有子节点,输出就像这个B
,C
, D
,E
,F
,G
,B
,那么输出就会像D
,E
一样。 我的第二个疑问是,如果我输入A
,那么它将显示他的左孩子和右孩子。
我的表结构是这样的
id c_n p_n
1 B A
2 C A
3 D B
4 E B
像这样。
此处有三个字段,一个是id
,c_n
,p_n
。
任何人都可以帮助我吗?
答案 0 :(得分: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
模型。
答案 1 :(得分:0)
您应该引入另外两个字段lft
和rgt
,并使用嵌套树模型为您的表使用这两列。
解释此设置和使用的示例文档是here。
这将使您能够更有效地进行这类查询。
例如,要获得整个树,您只需要查询lft
大于根的所有节点,以及rgt
更小的节点。