让孩子们,大孩子成为等级制

时间:2019-02-24 08:47:55

标签: ruby-on-rails postgresql hierarchical-data ltree

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

         1

     2       3

 4    5    6    7

使用postgres的ltree扩展实现层次结构。并且在gem ltree_hierarchy中,将保存父级和路径。

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获得同级,父级和子级。像

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

是否有建议在单个查询中获取节点的子代和大子代?

1 个答案:

答案 0 :(得分:2)

由于您在下面使用了postgres的LTREE-您可以像

一样直接查询(请参阅postgres documentation
 select * from table where path ~ '1234.*{1,2}'

(这里1234是父级的ID,*{1,2}指示匹配至少一个级别,最多匹配2个级别)