私はMysqlで再帰クエリを使用して1つのテーブルでlv 2とlv3の子を見つけるこのケースを持っています...
使用しているデータベース構造:
id name parent
1 A 0
2 B 0
3 C 0
4 D 1
5 E 1
6 F 2
7 G 2
8 H 3
9 I 3
10 J 4
11 K 4
Id = 1のデータをフィルタリングすると、期待した結果が生成されます。
id name parent
4 D 1
5 E 1
10 J 4
11 K 4
私はどこでも探していて、これを読んでいます http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ ですが、探している結果が見つかりません..
ご協力いただければ幸いです
SELECT *
FROM TABLENAME
WHERE PARENT = 1
UNION
SELECT *
FROM TABLENAME
WHERE PARENT IN
(SELECT ID FROM TABLENAME WHERE PARENT = 1)
特定の親のすべてのレベルの子を取得する場合は、これを試してください
select id,
name,
parent
from (select * from tablename
order by parent, id) tablename,
(select @pv := '1') initialisation
where find_in_set(parent, @pv) > 0
and @pv := concat(@pv, ',', id)
これを試して、はるかに高速
SELECT * FROM table AS T1 INNER JOIN (SELECT id FROM table WHERE parent = 1) AS T2 ON T2.id = T1.parent OR T1.parent = 1 GROUP BY T1.id