php - 如何使用 php 和我的 sql 检索根节点的所有节点

标签 php mysql

我有这样的结构:

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

我的问题是:

  • 如果我输入A(根节点),它将显示A下的所有子节点,输出是这样的B, C, D, E, F, G, <
  • 类似地,如果我输入 B,那么输出将像这样 DE

我的第二个查询是,如果我输入 A 那么它会显示哪个是他的左 child 和右 child 。

我的表结构是这样的

id     c_n      p_n 

1       B        A

2       C        A

3       D        B

4       E        B

等等。

这里有三个字段,一个是idc_np_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/

相关文章:

php - 我的 MYSQL 注入(inject)语句是否容易受到攻击?

PHP 文件删除权限被拒绝

mysql - Doctrine2 查询不填充实体对象

php - 图像未出现在棋盘中 - PHP

php - Laravel 验证错误

MySQL 计算重复的行值并且不显示重复的行名称

MySQL 将 3 个测验表与按属性/用户计算的总数连接起来

mysql - 使用正则表达式的 Flask SQLAlchemy 过滤器

Active Directory 根 DN 中的 php ldap_search - 空结果

php - 部分结果有效但处理不完整 : mod_fcgid: can't get data from http client