階層を持つ MySQL テーブルがあり、各レコードには ID、名前、親 ID があります。単一の MySQL クエリを使用して、指定された親 ID のすべての子 ID を取得したいとします。
MySQL 8 の場合:
再帰構文で使用します:
<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 の場合:
インライン変数、パス 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>
パススタイル識別子:
階層情報 (パス) を含む ID 値を割り当てます:
<code>ID | NAME --------|-------- 19 | category1 19/1 | category2 19/1/1 | category3 19/1/1/1 | category4</code>
次に、次のクエリを使用します:
<code class="language-sql">SELECT * FROM products WHERE ID LIKE '19/1/1/%'</code>
以上が単一のクエリを使用してMySQL階層構造ですべての子供IDを取得する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。