修正されたプレオーダー ツリー トラバーサル アルゴリズムを使用して保存された、階層的な順序付けされたデータがあります。
テーブルの内容は次のとおりです。
id lft rgt name
1 1 10 topnode
2 2 3 level1
3 4 7 level1
4 5 6 level2
5 8 9 level1
可視化:
私が望むのは、特定のノードの子ノードのみを選択することです(子ノードの子ノードではありません)。「トップノード」としましょう。クエリを修正しようとしていますが、理解できないようです。
たとえば、インターネットを検索すると、しばらく時間がかかります。各ノードの深さを計算することはできますが、それを選択することはできないようです。
このクエリ
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
各ノードの深さを示します。
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
それはいいのですが、列の深さを条件として使用することはできません。