我不知道我的要求是否可能,但这就是我的情况。我有一个表的结构有点像这样:
+--------------------------------------------------+
| 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等于当前的行row 的 id,然后越来越深入地重复该过程,直到基本项不再有任何子项。
有没有更好的办法?
Thanks!!
这在纯 SQL 中是不可能的。
SQL 旨在处理关系数据而不是树(层次结构数据)。
您可以在 SQL 模式中表示树,但是您将无法按照您的预期生成树。
唯一的方法是通过与您存储的级别一样多的连接来获得可用的结果。
您当前的模式可能支持多个级别,但是,管理超过一两个级别将非常困难。
您可能感兴趣嵌套集模型 http://en.wikipedia.org/wiki/Nested_set_model or 管理mysql中的分层数据 http://www.vbmysql.com/articles/database-design/managing-hierarchical-data-in-mysql
嵌套集有一些实现,例如this one http://gediminasm.org/article/tree-nestedset-behavior-extension-for-doctrine-2与原则 2 一起工作
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)