您有一个具有层次结构的 MySQL 表,其中每个记录都有一个 ID、一个名称和一个父 ID。您希望使用单个 MySQL 查询检索给定父 ID 的所有子 ID。
对于 MySQL 8 :
使用 WITH RECURSIVE 语法:
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;
对于 MySQL 5.x:
使用内联变量、路径 ID 或自连接:
内联变量:
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))
路径样式标识符:
分配包含层次信息(路径)的 ID 值:
<code>ID | NAME --------|-------- 19 | category1 19/1 | category2 19/1/1 | category3 19/1/1/1 | category4</code>
然后使用此查询:
SELECT * FROM products WHERE ID LIKE '19/1/1/%'
以上是如何使用单个查询检索 MySQL 分层结构中的所有子 ID?的详细内容。更多信息请关注PHP中文网其他相关文章!