mysql
この表では、
id | 名称 | 父ID |
---|---|---|
19 | 类别1 | 0 |
20 | 类别2 | 19 |
21 | 类别3 | 20 |
22 | 类别4 | 21 |
parent_id
mysql 8ソリューション:再帰的にparent_id
このクエリは、指定された父親IDのすべてのサブセートカテゴリを取得します(この例では19)。出力には、カテゴリ1(ID = 19)に属する直接または間接のすべてのカテゴリが含まれます。
<code class="language-sql">WITH RECURSIVE cte (id, name, parent_id) AS ( SELECT id, name, parent_id FROM products WHERE parent_id = 19 UNION ALL SELECT p.id, p.name, p.parent_id FROM products p INNER JOIN cte ON p.parent_id = cte.id ) SELECT * FROM cte;</code>
古いmysqlバージョン(5.x)の場合、2つの代替方法があります。
このクエリは、MySQLの特定の関数を使用して、実行中に変数を割り当てて変更します。親ID(19)を使用した変数を初期化し、関数を使用して
を使用して子孫リストに表示されるかどうかを確認することにより、子孫のIDリストを徐々に構築できます。<code class="language-sql">SELECT id, name, parent_id FROM (SELECT * FROM products ORDER BY parent_id, id) products_sorted, (SELECT @pv := '19') initialisation WHERE FIND_IN_SET(parent_id, @pv) AND LENGTH(@pv := CONCAT(@pv, ',', id));</code>
self -connection:@pv
FIND_IN_SET
parent_id
このクエリは、自己接続の親ID(19)を使用して、階層構造を横断します。 列に従ってサブウォッチを親テーブルに接続することにより、親レベルのすべての子孫を再帰的に抽出できます。
以上がMySQL で階層型再帰クエリを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。