php - 如何编写将返回嵌套在父项下的子项的 MYSQL 查询?

标签 php mysql database

我不知道我的要求是否可行,但这是我的情况。我有一个结构有点像这样的表:

+--------------------------------------------------+
|   id   |   parent_id   |   name   |   category   | ....
+--------------------------------------------------+
|    0   |       -1      |   item0  |      1       |
|    1   |        0      |   item1  |      1       |
|    2   |        0      |   item2  |      1       |
|    3   |        2      |   item3  |      1       | 
|    4   |        2      |   item4  |      1       | 
|    5   |       -1      |   item5  |      1       | 
+--------------------------------------------------+

parent_id 为 -1 表示它是没有父项的“基础”项。每个项目都会有更多的信息栏。我需要以某种方式输出嵌套类别中的所有项目,如下所示:

item0 => item1    
      => item2
            => item3
            => item4  
item5  

我不知道这是否有道理,但希望它有道理!

我能想到的唯一方法是进行查询以获取所有“基本”项(查询 parent_id = -1 的行)然后遍历每个结果行,查询其 parent_id 相等的行到当前行的 id,然后越来越深地重复该过程,直到没有更多的子项用于基本项。

有没有更好的办法?

谢谢!!

最佳答案

在纯 SQL 中是不可能的。

SQL 旨在处理关系数据而不是树(分层数据)。

您可以在 SQL 模式中表示树,但是您无法按照您的意愿生成树。

唯一的方法是通过创建与您正在存储的级别一样多的连接来获得可用的结果。

您当前的架构可能支持多个级别,但是,管理超过一个或两个级别将非常困难。

您可能对 Nested Set Model 感兴趣或 Managing hierarchical data in mysql

嵌套集有一些实现,例如 this one使用 Doctrine 2

关于php - 如何编写将返回嵌套在父项下的子项的 MYSQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11110363/

相关文章:

php - ORDER BY 在 MySQL 中有两列

php - 如何将文件内容添加到 PHP 中的 MySQL 查询

mysql - 使用多个表的 SQL SELECT

javascript - 如何转换 URL 中的 JavaScript

php - CURL解析PHP

php - 特定优惠券的 Woocommerce 总销售额

sql - SSIS 将百分比转换为小数

php - 包含 '.' 和 '+'/'-' 的未加括号的表达式的行为将在 PHP 8 : '+' /'-' will take a higher precedence 中发生变化

php - 在单独的类中配置 MySQL 数据库

mysql - 使用node.js在MySql中批量插入