我有这样的结构:
A
(根节点)有两个 childB
(左 child )和C
(右 child )。- 同样
B
也有两个节点D
(左 child )和E
(右 child )。 - 同样
C
也有两个结点F
(左 child ),G
(右 child )这样一个。
我的问题是:
- 如果我输入
A
(根节点),它将显示A
下的所有子节点,输出是这样的B
,C
,D
,E
,F
,G
, < - 类似地,如果我输入
B
,那么输出将像这样D
,E
。
我的第二个查询是,如果我输入 A
那么它会显示哪个是他的左 child 和右 child 。
我的表结构是这样的
id c_n p_n
1 B A
2 C A
3 D B
4 E B
等等。
这里有三个字段,一个是id
,c_n
,p_n
。
任何人都可以帮助我吗?
最佳答案
鉴于您当前的架构,以下内容将根据您的请求以逗号分隔的字符串形式(有条件地)从 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
但是,您应该考虑切换到嵌套集
模型以简化选择并提高选择速度。
关于php - 如何使用 php 和我的 sql 检索根节点的所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15464225/