gpt4 book ai didi

mysql - 从mysql中的同一个表中获取父子关系的所有数据

转载 作者:行者123 更新时间:2023-11-29 01:12:57 26 4
gpt4 key购买 nike

我正在尝试获取满足父子关系的所有行。例如

  id         Title    parent_id
1200 A 1000
1201 B 1000
1202 C 1000
1203 D 1000
1204 E 1200
1205 F 1200
1206 G 1201
1207 H 1205
1208 I 1205
1209 J 1205

现在我有 1209 id,我想检索所有满足 1209 父子关系的行。像这里 1209 与 1205 相关,1205 与 1200 相关,1200 与 1000 相关。

我试过这个查询

  SELECT * FROM `category` a left join category b on a.id=b.parent_id where a.id=1209

但这只给我一个记录。我们正在尝试获取此关系中的所有行。

最佳答案

如果你只是在寻找它的 parent 、祖 parent 、曾祖 parent ,你可以使用这样的东西。

SELECT id,title,parent_id FROM
(SELECT id,title,parent_id,
CASE WHEN id = 1209 THEN @id := parent_id
WHEN id = @id THEN @id := parent_id
END as checkId
FROM Test
ORDER BY id DESC) as T
WHERE checkId IS NOT NULL

sqlfiddle

以防万一,如果你想找到一个 id 的所有 child 、孙子或曾孙,你可以使用这个

SELECT id,title,parent_id FROM
(SELECT id,title,parent_id,
CASE WHEN id = 1200 THEN @idlist := CONCAT(id)
WHEN FIND_IN_SET(parent_id,@idlist) THEN @idlist := CONCAT(@idlist,',',id)
END as checkId
FROM Test
ORDER BY id ASC) as T
WHERE checkId IS NOT NULL

sqlfiddle for finding children

查询查找多个 child 的所有 parent /祖 parent /曾祖 parent

SELECT id,title,parent_id FROM
(SELECT id,title,parent_id,
CASE WHEN id in (1209,1206) THEN @idlist := CONCAT(IFNULL(@idlist,''),',',parent_id)
WHEN FIND_IN_SET(id,@idlist) THEN @idlist := CONCAT(@idlist,',',parent_id)
END as checkId
FROM Test
ORDER BY id DESC)T
WHERE checkId IS NOT NULL

sqlfiddle

关于mysql - 从mysql中的同一个表中获取父子关系的所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36523356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com