【问题标题】:SELECT an arbitrarily deep tree that is represented by the adjacency list model in mysql?选择一个任意深度的树,它由mysql中的邻接表模型表示?
【发布时间】:2010-06-10 19:08:23
【问题描述】:

在 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

我知道使用嵌套集模型可以做到这一点。但是嵌套集合有些东西并不理想,我希望不必切换。

感谢您的建议!

【问题讨论】:

    标签: php mysql nested-sets adjacency-list


    【解决方案1】:

    编辑:我没有注意到标题中任意深的条款:

    您可以编写一个存储过程来对行进行递归。

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

    【讨论】:

    • 对树的修改——比如添加一个节点——重写大#s行的左右值。我担心可扩展性。
    • 很高兴听到您在如此大的负载下使用嵌套集取得了成功。我的要求没有那么重。
    【解决方案2】:

    简短回答:不。

    遍历用父指针表示的树的唯一方法是在下一组之后跟随一组父 ID。如果您可以通过简单地在表格中多次连接来限制深度,那么这是可能的,但是对于无限深度,应用程序端循环通常是要走的路。

    【讨论】:

    • 父/子不是存储分层数据的唯一方法...嵌套集模型在这方面工作得非常灵活..
    • 特拉维斯在原帖中承认了这一点。我正在专门解决是否可以使用父指针来完成的问题。
    猜你喜欢
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多