ホームページ > データベース > mysql チュートリアル > 再帰クエリで MySQL の階層データ内の祖先を効率的に取得するにはどうすればよいですか?

再帰クエリで MySQL の階層データ内の祖先を効率的に取得するにはどうすればよいですか?

DDD
リリース: 2024-12-04 19:55:12
オリジナル
976 人が閲覧しました

How Can Recursive Queries Efficiently Retrieve Ancestors in MySQL's Hierarchical Data?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート