您有一個具有層次結構的 MySQL 表,其中每個記錄都有一個 ID、一個名稱和一個父 ID。您希望使用單一 MySQL 查詢來擷取給定父 ID 的所有子 ID。
對於 MySQL 8 :
使用 WITH RECURSIVE 語法:
<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中文網其他相關文章!