获取层次结构中的 children、grand children

Getting the children, grand children in hierarchical structure

我正在使用 rails 和 gem 的分层数据模型,称为 ltree_hierarchy(https://github.com/cfabianski/ltree_hierarchy)。因为每个节点都有一个 parent id(这是当前节点的直接 parent)。

         1

     2       3

 4    5    6    7

层次结构是使用 postgres 的 ltree 扩展实现的。而在 gem ltree_hierarchy 中, parent 和路径将被保存。

node       parent        path

  1         NULL         1

  2          1           1.2

  3          1           1.3

  4          2           1.2.4

  5          2           1.2.5

  6          3           1.3.6

  7          3           1.3.7

我可以使用节点的 parent_id 获取兄弟 parent 和 children。像,

select * from table where parent_id = 1; # for getting the children of a node 1

select * from table where parent_id = 1 and id !=2; # for getting the sibling of a node 2

是否有任何建议可以在单个查询中获取节点的 children 和 grand children?

因为您在下面使用 postgres 的 LTREE - 您可以直接查询它(参见 postgres documentation),例如

 select * from table where path ~ '1234.*{1,2}'

(这里1234是parent的id,*{1,2}表示至少匹配一级,最多匹配2级)