Php 选择mysql中邻接列表模型表示的任意深的树?

Php 选择mysql中邻接列表模型表示的任意深的树?,php,mysql,nested-sets,adjacency-list,Php,Mysql,Nested Sets,Adjacency List,在mysql中,我有一个使用邻接列表模型表示的树 MYTREE id parent_id title 我想知道: 给定一个节点的id,是否有任何方法可以选择该节点所在的整个树,并包含深度信息?这棵树任意地深,所以我不能说可能有多少层。但结果集可能如下所示: ID TITLE DEPTH 4 title1 1 8 title2 2 16 title8 3 9 title3 2 15

在mysql中,我有一个使用邻接列表模型表示的树

MYTREE
   id
   parent_id
   title
我想知道:

给定一个节点的id,是否有任何方法可以选择该节点所在的整个树,并包含深度信息?这棵树任意地深,所以我不能说可能有多少层。但结果集可能如下所示:

ID      TITLE     DEPTH
4       title1    1
8       title2    2
16      title8    3
9       title3    2
15      title4    3
我知道使用嵌套集模型可以做到这一点。但嵌套集有些地方并不理想,我希望不必切换

谢谢你的建议

简短回答:不


遍历由父指针表示的树的唯一方法是在下一个指针之后跟随一组父ID。如果您可以限制深度,只需在整个表中连接多次即可,但如果深度不受限制,则应用程序端循环通常是可行的。

编辑:我没有注意到标题中的任意深度子句:

您可以编写一个存储过程在行上递归


但是嵌套集有什么不理想的地方(至少是插入前触发器或存储过程无法处理的地方)?

父/子并不是存储层次数据的唯一方法。。。嵌套集模型在这方面非常灵活。特拉维斯在最初的帖子中承认了这一点。我特别要解决的问题是,是否可以使用父指针来完成。对树的修改—比如添加节点—重写大行的左右值。我很关心可伸缩性。很高兴听到您在这么大的负载下成功地使用了嵌套集。我的要求几乎没有那么重。