我不知道我的要求是否可行,但这是我的情况。我有一个结构有点像这样的表:
+--------------------------------------------------+
| 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/