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

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.好了大概效果就是如此  小编才疏浅陋 ,还望大神勿喷。一起加油!

发布了46 篇原创文章 · 获赞 42 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/tangthh123/article/details/101150194