我不知道我问的是否可能,但这是我的情况.我的表格有点像这样:
+--------------------------------------------------+ | 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一起使用