获取层次结构中的 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级)
我正在使用 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级)