递归查询子节点

#若存在则删除
DROP FUNCTION IF EXISTS `getBranchChildList`;
#创建函数 入参VARCHAR(1000) 返回参数VARCHAR(1000)
DELIMITER $$
CREATE #DEFINER=`root`@`localhost` #指定用户
 FUNCTION `getBranchChildList`(rootId VARCHAR(1000)) RETURNS VARCHAR(1000) CHARSET utf8
    DETERMINISTIC
BEGIN
    #定义返回参数
    DECLARE str VARCHAR(1000);
    #定义子id
    DECLARE cid VARCHAR(1000);
    #赋值
    SET cid = rootId;
    #语法:while 条件 do 循环体 END WHILE;
    #循环递归
    WHILE cid IS NOT NULL DO
        IF str IS NOT NULL THEN   
            SET str = CONCAT(str, ',', cid);  
        ELSE   
            SET str = cid;   
        END IF; 
        SELECT GROUP_CONCAT(BRH_ID) INTO cid FROM im_branch WHERE FIND_IN_SET(BRH_PARENT_ID, cid) > 0;
    END WHILE;
    #返回结果eg: 00000,00001,00002.....
    RETURN str;
END$$
DELIMITER ;


eg:
#查当前机构和子机构
SELECT b.BRH_ID,b.BRH_NAME FROM im_branch b WHERE FIND_IN_SET(BRH_ID, getBranchChildList(#session_usrBranchId) ) 
#查子机构
SELECT b.BRH_ID,b.BRH_NAME FROM im_branch b WHERE FIND_IN_SET(BRH_PARENT_ID, getBranchChildList(#session_usrBranchId) ) 

 

转载于:https://www.cnblogs.com/TianSuoMuLong/p/10059006.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值