如何通过在mysql中查询自引用表来获得递归结果?

时间:2012-01-29 21:15:53

标签: php mysql recursion self-reference

我有一个自引用表'comments',其中comments.replyToId引用comments.ID。

我的问题是,如何使用自引用表查询数据库以获得正确排序的结果,以便我可以将结果表示为PHP中的树?

我试过

select * from comments as comments_1 
left join comments as comments_2 
on comments_1.id = comments_2.replyToId

我正在尝试在php中使用此结果

1 个答案:

答案 0 :(得分:3)

你不会直接从MySQL中获得递归结果。最近有类似的讨论 - 一些RDBMS可能使用存储过程等,但不能使用开箱即用的SQL(参见How can I get ancestor ids for arbitrary recursion depth in one SQL query?)。

在类似情况下我做的是:在没有父母的情况下获取所有评论。然后,对于每个注释,获取其子项(如果存储每个注释的“深度”,则可以通过一个SQL查询获得所有这些子项和下一层的所有子项)。将孩子存放在树形结构中的适当位置,重复。

如果你需要更低级别,你需要分享一些代码,解释你的数据结构,你到目前为止尝试过的等等,这只是一般方法。