ホームページ >データベース >mysql チュートリアル >単一の再帰クエリを使用して MySQL テーブル内のすべての親レコードを検索するにはどうすればよいですか?
再帰を使用した MySQL テーブル内の親の検索
データベース スキーマでは、階層関係を確立するのが一般的です。このようなデータをクエリする場合、特定のレコードだけでなく、その階層的な接続も取得する必要があります。この記事では、単一のクエリを使用して MySQL テーブル内のレコードのすべての親を検索するタスクについて説明します。
問題ステートメント
列 ID、TITLE を持つテーブルが指定された場合、CONTROLLER、METHOD、および PARENT_ID は、単一の SQL を使用して、TITLE が「カテゴリ」であるレコードのすべての親を検索します。 query.
必要な出力
出力には次が表示されます。列:
そして、 records:
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 |
Solution
目的の出力を実現するには、MySQL の再帰クエリ機能を活用する必要があります。使用できる SQL クエリは次のとおりです:
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;
このクエリを分析してみましょう:
これを実行すると、クエリを実行すると、1 回のデータベース呼び出しで、TITLE を「カテゴリ」として持つレコードのすべての親を取得できます。
以上が単一の再帰クエリを使用して MySQL テーブル内のすべての親レコードを検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。