0

我正在使用名为 ltree_hierarchy( https://github.com/cfabianski/ltree_hierarchy ) 的带有 rails 和 gem 的分层数据模型。因为每个节点都会有一个父 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

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

4

1 回答 1

2

由于您在LTREE下面使用 postgres - 您可以直接查询它(请参阅postgres 文档),例如

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

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

于 2019-02-24T09:16:32.890 回答