ホームページ >データベース >mysql チュートリアル >単一のクエリを使用して、MySQL 階層内の特定のエントリのすべての親ノードを検索するにはどうすればよいですか?
データベース管理では、階層データを取得する際に、再帰アルゴリズムを含む複雑なクエリが必要になることがよくあります。このようなシナリオの 1 つは、上記のような階層テーブル内の特定のエントリのすべての親ノードを抽出する必要がある場合に発生します。
メニュー項目の階層を持つ提供されたテーブルを考えてみましょう。 、各ノードには ID、タイトル、親 ID があります。私たちの目標は、単一の MySQL クエリを使用して、「カテゴリ」というタイトルのエントリのすべての親ノードをフェッチすることです。
再帰クエリを使用してテーブルを走査し、各レベルの親ノード。次のクエリはこれを実現します:
SELECT T2.id, T2.title,T2.controller,T2.method,T2.url FROM ( SELECT @r AS _id, (SELECT @r := parent_id FROM menu WHERE id = _id) AS parent_id, @l := @l + 1 AS lvl FROM (SELECT @r := 31, @l := 0) vars, menu m WHERE @r <> 0) T1 JOIN menu T2 ON T1._id = T2.id ORDER BY T1.lvl DESC;
クエリを実行すると、目的の出力が生成されます:
id | title | controller | method | url | parent_id |
---|---|---|---|---|---|
3 | Modules | admin | modules | (NULL) | 0 |
17 | User Modules | modules | user_module | (NULL) | 3 |
31 | Categories | categories | category | (NULL) | 17 |
以上が単一のクエリを使用して、MySQL 階層内の特定のエントリのすべての親ノードを検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。