3

修正されたプレオーダー ツリー トラバーサル アルゴリズムを使用して保存された、階層的な順序付けされたデータがあります。

テーブルの内容は次のとおりです。

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

それはいいのですが、列の深さを条件として使用することはできません。

4

1 に答える 1

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

お役に立てば幸い

于 2011-12-03T01:31:52.327 に答える