MySQL での階層データ取得のための再帰クエリ
データベース内の階層データを扱う場合、多くの場合、複数の階層データにまたがって情報を取得することが必要になります。関係のレベル。 MySQL では、再帰的クエリがこのタスクに対する強力なソリューションを提供します。
次の例を考えてみましょう: 'a' と 'b' という 2 つの列を持つテーブルで表される単純な家系図を想像してください。ここで、'a' は表します。親、「b」は子を表します。特定の個人のすべての祖先 (両親、祖父母など) を見つけたい場合、どのようにアプローチすればよいでしょうか?
MySQL では、再帰クエリを利用してツリー構造を横断し、祖先を取得できます。特定のノードの。 「b」値が 5 の個人の祖先を見つけたいとします。次のクエリはこれを実現します。
SELECT @id := (SELECT senderid FROM mytable WHERE receiverid = @id) AS person FROM (SELECT @id := 5) vars STRAIGHT_JOIN mytable WHERE @id IS NOT NULL
このクエリは、再帰的サブクエリを使用して、「a」間の関係を確立します。 (senderid) 列と「b」(receiverid) 列。内部クエリは変数 @id を目的のノード (5) に初期化し、次に外部クエリを使用して祖先がなくなるまで後続の行を再帰的に結合します。
このクエリを実行すると、次の結果が得られます。 :
person |
---|
1 |
2 |
3 |
4 |
この結果は、最初のノード自体とその親、祖父母、およびノードを含む、'b' 値 5 のノードに至る完全な階層を提供します。 すぐ。したがって、MySQL の再帰クエリは、階層データをナビゲートし、複数レベルの関係にわたる詳細情報を取得するための強力なツールとして機能します。
以上が再帰クエリで MySQL の階層データ内の祖先を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。