1

MPTT (変更されたプレオーダー ツリー トラバーサル) モデルを使用して、MySQL テーブルに階層データを格納しています。(MPTT モデル: 別の説明は入れ子集合モデルです。)。私の質問は次のとおりです。ツリーでクエリの結果をソートする賢い方法を見つけた人はいますか? 「ORDER BY label」に進むこともできますが、結果セットは、ノードの場所やツリー内の深さに関係なく、ラベルでソートされます。

以下は、任意のノードのツリーを各ノードの深さで取得するために使用するクエリの例です。

SELECT node.id, (COUNT(parent.id) - (sub_tree.depth + 1)) AS depth
FROM person AS node,
person AS parent,
person AS sub_parent, (
    SELECT node.id, (COUNT(parent.id) - 1) AS depth
    FROM person AS node,
    person AS parent
    WHERE node.lft BETWEEN parent.lft AND parent.rgt
    AND node.id = 1 // that's my root object
    GROUP BY node.id, node.lft
    ORDER BY node.lft
) AS sub_tree
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt
AND sub_parent.id = sub_tree.id 
GROUP BY node.id
ORDER BY node.lft

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/に従って。

もちろん、これは常に、ネストされたセット内の位置によってアイテムを並べ替えます。'lastName' や 'accountBalance' や 'town' などで注文したい場合はどうすればよいでしょうか? それは MySQL で実行できますか? それとも、スクリプト言語で結果をソートする必要があると思いますか?

4

1 に答える 1

1

IMHOにはMPTTツリーがあり、常にlft(左から右)でソートしています。それが木のすべてです。他のフィールドで並べ替えると、実際には階層的ではありません。

于 2010-01-27T21:00:38.703 に答える