net*_*iul 3 sql modified-preorder-tree-t hierarchical-data
我使用修改的预订树遍历算法保存了分层有序数据.
这是表格内容:
id lft rgt name
1 1 10 topnode
2 2 3 level1
3 4 7 level1
4 5 6 level2
5 8 9 level1
Run Code Online (Sandbox Code Playgroud)
可视化:

我想要的只是选择某个节点的子节点(所以不是子节点的子节点).让我们说'topnode'.我正在尝试修复查询,但我似乎无法理解它.
搜索互联网给我带来了一段时间,例如:我可以计算每个节点的深度,但我似乎无法选择它.
这个查询
SELECT node.*, (COUNT(parent.id) - 1) AS depth
FROM tree AS node
CROSS JOIN tree AS parent
WHERE (node.lft BETWEEN parent.lft AND parent.rgt)
GROUP BY node.id
ORDER BY node.lft
Run Code Online (Sandbox Code Playgroud)
显示每个节点的深度:
id lft rgt name depth
1 1 10 topnode 0
2 2 3 level1 1
3 4 7 level1 1
4 5 6 level2 2
5 8 9 level1 1
Run Code Online (Sandbox Code Playgroud)
这很好,但我不能使用柱深作为条件!
Edw*_*ard 10
我认为这应该可以解决问题
SELECT node.*, (COUNT(parent.id) - 1) AS depth
FROM tree AS node
CROSS JOIN tree AS parent
WHERE (node.lft BETWEEN parent.lft AND parent.rgt)
GROUP BY node.id
HAVING depth = {{ENTER YOUR REQUIRED DEPTH HERE}}
ORDER BY node.lft
Run Code Online (Sandbox Code Playgroud)
希望有所帮助