我正在使用带有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
是否有建议在单个查询中获取节点的子代和大子代?
答案 0 :(得分:2)
由于您在下面使用了postgres的LTREE
-您可以像
select * from table where path ~ '1234.*{1,2}'
(这里1234
是父级的ID,*{1,2}
指示匹配至少一个级别,最多匹配2个级别)