一、通过父id查询所有子id
SELECT t3.*
FROM(SELECT t1.*,
IF (FIND_IN_SET(parent_id, @pids) > 0,@pids := CONCAT(@pids, ',', id),'0') AS ischild
FROM(SELECT t.id,t.parent_id,t.NAME
FROM t_parent AS t
ORDER BY t.id ASC) t1,
(SELECT @pids := '0') t2) t3
WHERE ischild != '0'使用时候把t_parent 改成自己表,@pids := '0’这个是要查询的父id号
二、通过子id查询父id到根节点
SELECT t3.*
FROM(SELECT t1.*,
IF (FIND_IN_SET(id, @ids) > 0,@ids := CONCAT( parent_id,',', @ids),'0') AS isparent
FROM(SELECT t.id,t.parent_id,t.NAME
FROM t_parent AS t
ORDER BY t.id DESC) t1,
(SELECT @ids := '111') t2) t3
WHERE t3.isparent != '0'使用时候把t_parent 改成自己表,@ids := '111’这个是要查询的子id号,还有和查询父id不同的地方是ORDER BY t.id DESC,这里使用desc排序
文章提供两种SQL查询方法,一种用于通过父ID查找所有子ID,另一种则是通过子ID追溯到父ID直至根节点。查询时需将t_parentASt替换为实际表名,@pids和@ids分别设置为要查询的父ID和子ID。

1451

被折叠的 条评论
为什么被折叠?



