mysql查询父id下所有子id,或者通过子id查询所有父id到最上层

文章提供两种SQL查询方法,一种用于通过父ID查找所有子ID,另一种则是通过子ID追溯到父ID直至根节点。查询时需将t_parentASt替换为实际表名,@pids和@ids分别设置为要查询的父ID和子ID。

一、通过父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排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值