単一の再帰クエリを使用した MySQL テーブル内のすべての親の検索
サンプルを使用して次の MySQL テーブル スキーマを検討します。データ:
| ID | TITLE | CONTROLLER | METHOD | PARENT_ID | |----|-------------------|------------|-------------------|-----------| | 1 | Dashboard | admin | dashboard | 0 | | 2 | Content | admin | content | 0 | | 3 | Modules | admin | modules | 0 | ...
チャレンジ:
私たちの目標は、単一のレコードを使用して、特定のレコード、つまりタイトル = 'カテゴリ' を持つレコードのすべての親を見つけることです。 SQL クエリ。
必要出力:
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
解決策:
再帰共通テーブル式 (CTE) を使用してテーブル階層を横断し、目的のテーブルのすべての祖先を識別します。レコード:
WITH RECURSIVE Parents AS ( SELECT id, parent_id FROM menu WHERE id = 31 UNION ALL SELECT m.id, m.parent_id FROM Parents AS p JOIN menu AS m ON p.parent_id = m.id ) SELECT m.id, m.title, m.controller, m.method, m.url, m.parent_id FROM Parents AS p JOIN menu AS m ON p.id = m.id ORDER BY p.id DESC;
説明:
このクエリを実行すると、目的の出力が得られ、すべての親がリストされます。カテゴリレコード。
以上が単一の再帰クエリを使用して MySQL テーブル内のレコードのすべての祖先を検索する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。