树形结构 之通过父节点查询出所有的子节点 ,通过子节点查询出所有的父节点

1.树形结构是开发过程中遇到的比较常见,今天分享一个 如何通过父节点 查询出所有的子节点 ,通过子节点查询出父节点的方法

2.首先呢,我在数据库中是通过 id 和 parent_id 来生成这个 树形结构的关系      id 为当前数据id ,parent_id为当前数据的父节点 id 

  我是将父节点的parent_id 设为0

3.接下来我分享一下如何通过数据id, 查询到 其下面的所有子节点     父-------> 子

CREATE DEFINER=`root`@`%` FUNCTION `queryRegionDirectoryChildIdById`(parentId INT) RETURNS varchar(21845) CHARSET utf8
BEGIN
                    DECLARE sTemp VARCHAR(15000);
                    DECLARE sTempChd VARCHAR(15000);
                    SET sTemp = '-2';
                    SET sTempChd = cast(parent_idas char);
                    WHILE sTempChd is not NULL DO
                    SET sTemp = CONCAT(sTemp,',',sTempChd);
                    SELECT group_concat(id) INTO sTempChd FROM region_directory where FIND_IN_SET(parent_id,sTempChd)>0;
                    END WHILE;
                    return sTemp;
                    END

4.如何通过数据 id 查询到其所有的父节点                                                       子------>父

CREATE DEFINER=`root`@`%` FUNCTION `listBosPositionParentById`(rootId varchar(36),departmentId int) RETURNS varchar(21845) CHARSET utf8
    DETERMINISTIC
BEGIN
    DECLARE ptemp VARCHAR(21845);
    DECLARE ctemp VARCHAR(21845);
    SET ptemp = '-1';
    SET ctemp = rootId;
    WHILE ctemp IS NOT NULL DO
      SET ptemp = concat(ptemp, ',', ctemp);
      SELECT GROUP_CONCAT(uid) INTO ctemp
      FROM bos_position
      WHERE uid = ( SELECT parent_id FROM bos_position WHERE FIND_IN_SET(uid,ctemp) > 0 and dept_id=departmentId and is_del='0') ;
    END WHILE;
    RETURN ptemp;
  END

5.关于这俩个函数该如何执行    我大概的介绍一下。

1)首先小编用的工具是Navicat Premium   连接的是mysql数据库    接下来我将演示如何在Navicat Premium中如何执行这俩个函数

2) 点击图中的函数   ---> 然后新建函数   --->  输入这个函数的名字 和类型     然后点击下一步 点击完成,将上述代码直接复制进去即可。

6.好了大概效果就是如此  小编才疏浅陋 ,还望大神勿喷。一起加油!

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值