代码之家  ›  专栏  ›  技术社区  ›  Carl

查询以获取数据库中树的所有祖先/后代?

  •  3
  • Carl  · 技术社区  · 14 年前

    我有一张桌子 (id, parent_id, data) parent_id 指向同一表中的另一行(或为空)。

    有没有标准的方法来查询(1)某个id的所有祖先和(2)某个id的所有后代?

    DBIx::Class ,因此,如果有一种最方便的方法来使用该模块(或其他模块),我也很乐意听到。

    编辑:clarify-all parents=所有祖先,all children=所有后代。

    2 回复  |  直到 14 年前
        1
  •  3
  •   daxim Fayland Lam    14 年前

    这在很大程度上取决于您使用的SQL的风格。

    在Oracle中,可以使用 START WITH id = yourid CONNECT BY PRIOR id = parent_id 构造。在PostgreSQL中,可以使用函数 connectby('tablename', 'id', 'parent_id', 'id', value, 0) .

    在许多情况下,表示树是有意义的 不同的是,通过定义一列, 到该节点。

    在网上找到的,我最近看到的, DBIx::Class ,可在以下位置找到: http://blogs.perl.org/users/ovid/2010/05/threaded-forum-sql.html

        2
  •  1
  •   Carl    14 年前

    DBIx::Class::Tree::AdjacencyList 目前。是的 我所寻找的一切(不幸的是,没有结果集,但是我们可以通过从另一个方向来解决这个问题)。

    然而,@Grrrr的回答让我思考,我们可能会添加一个单独的table+模块 (id, record_type, record_ancestors) 我们的模型有一个 parent_id 列并提供 ancestors

    编辑:或者我们可以用 DBIx::Class::Tree::Mobius -尽管看起来,把桌子原封不动地看是不可理解的。