3

私は、mySQL テーブルに格納されたカテゴリのツリー構造category_idparent_id関係を持っています。Parent_id = Nullルートノードに相当します。

Category (category_id, category_name, parent_id)

私がやろうとしているのは、すべてのリーフ ノードをフェッチして、ノードの category_id を指定することです。この記事をフォローしました。以下のクエリを使用してすべてのリーフ ノードを取得する方法について説明します。

SELECT t1.category_name FROM
category AS t1 LEFT JOIN category as t2
ON t1.category_id = t2.parent_id
WHERE t2.category_id IS NULL;

しかし、サブツリーのリーフ ノードを取得しようとしています。例えば:

ここに画像の説明を入力

上記の構造でノード 3 を指定すると、結果は 9、10、7、11、12、13 になります。

私はまた、ここで与えられた解決策を試しました: adjacency model 、与えられた id return the leaf nodes。しかし、私は望ましい結果を得ることができません。

解決策を見つけるのを手伝ってもらえますか?

4

3 に答える 3

1

リーフが順序付けられている場合 (つまり、子が親よりも大きい場合)、別の方法があります。

SELECT tree.id FROM tree
LEFT JOIN tree t1 ON (t1.parent_id = tree.id)
WHERE t1.id IS NULL -- all leafs
AND tree.id > 3 -- greater than starting branch
于 2018-01-16T12:59:41.190 に答える