sql查询所有父节点 和 所有子节点

本文提供两种SQL查询语句,一种用于查找所有父节点,另一种用于查找所有子节点。通过使用递归查询和变量传递的方式,可以高效地遍历树形结构的数据表,获取指定节点的上下级关系。

查询所有父节点

SELECT id
    FROM ( 
        SELECT 
                @r AS _id, 
                (SELECT @r := direct_recommender FROM t_admin WHERE id = _id) AS parent_id, 
                 @l := @l + 1 AS lvl 
        FROM 
                (SELECT @r := #{要查询的节点id}, @l := 0) vars, 
                t_admin h 
        WHERE @r <> 0) T1 
    JOIN t_admin T2 
    ON T1._id = T2.id
ORDER BY id;

其中 direct_recommender 为表中字段,标示父节点id的字段,t_admin为表名

查询所有子节点

SELECT 
    id
FROM
    (SELECT 
        t1.id,
        IF(FIND_IN_SET(direct_recommender, @pids) > 0, @pids:=CONCAT(@pids, ',', id), 0) AS ischild
    FROM
        (SELECT 
        id, direct_recommender
    FROM
        t_admin t
    ORDER BY id) t1, (SELECT @pids:=#{要查询的节点id}) t2) t3
WHERE
    ischild != 0;   

其中 direct_recommender 为表中字段,标示父节点id的字段,t_admin为表名

上述调用上述两个语句就能获得节点所在树上的所有节点id

转载于:https://my.oschina.net/aidelingyu/blog/3059102

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值