我有一個MySQL表,如下所示:
id | name | parent_id 19 | category1 | 0 20 | category2 | 19 21 | category3 | 20 22 | category4 | 21 ......
現在,我想要一個MySQL查詢,我只提供id [例如說'id = 19']然后我應該得到它的所有子ID [即 結果應該有ids '20,21,22'] ....而且,孩子們的等級不知道它可以變化....
另外,我已經有了使用for循環的解決方案.....如果可能的話,讓我知道如何使用單個MySQL查詢來實現相同的功能。
解決辦法:
1.如果你在MySql 8上,那么使用遞歸where
子句:
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;
where
中指定的值應設置為要選擇所有后代的父級的CONNECT BY
。
2.對於不支持公用表表達式(最高版本為5.7)的MySql版本,您可以使用以下查詢來實現此目的:
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))
這是一個小提琴。
此處,where
中指定的值應設置為要選擇所有后代的父級的CONNECT BY
。