• 父节点递归查询和子节点递归查询函数


    本文为博主原创,未经允许不得转载:

    由于在项目中用到了向上查询父节点的递归查询和向下查询子节点查询的递归查询,由于在实现过程中,写递归查询的sql函数

    花费了较长的时间,所以在此总结一下,两种递归查询的函数的实现写法:

      向下查询子节点的递归查询:

    先展示表结构:

           根据区域查询对应的下级区域信息,其中parentId为zoneId对应的下级区域id信息。当再查询下级区域信息时,即可将parentID作为zoneId来

    查询子节点信息,由于不同区域对应的子节点层数也不一样,当要获取所有子节点的zoneId时,可以使用以下的递归查询:

    BEGIN
        DECLARE sTemp VARCHAR(10000);
        DECLARE sTempChd VARCHAR(10000);
    
        SET sTemp = '$';
        SET sTempChd =CAST(rootId AS CHAR);
    
        WHILE sTempChd IS NOT NULL DO
            SET sTemp = CONCAT(sTemp, ',', sTempChd);
            SELECT GROUP_CONCAT(zoneid) INTO sTempChd FROM  tbl_zone_info WHERE STATUS!='3' and FIND_IN_SET(parentid,sTempChd)>0;
           END WHILE;
        RETURN sTemp;
    END

    使用方式:

    向上查询的父查询递归查询:

      先展示表结构:

     根据组id查询对应的父组有哪些:parentId即为对应groupId组id的父组id,当获取到父组id即parentid,即可以将parentId作为groupId组id

    查询到父组的信息。

    实现的递归函数为:

    BEGIN   
    DECLARE fid varchar(100) default '';   
    DECLARE str varchar(1000) default rootId;   
      
    WHILE rootId is not null  do   
        SET fid =(SELECT PARENTID FROM tbl_group_info WHERE GROUPID = rootId);   
        IF fid is not null THEN   
            SET str = concat(str, ',', fid);   
            SET rootId = fid;   
        ELSE   
            SET rootId = fid;   
        END IF;   
    END WHILE;   
    return str;  
    END

    使用方式:

     当得知层级关系时,可以直接使用以下sql,进行自我联查:

    select  a.GROUPNAME AS lev1,b.GROUPNAME AS lev2,c.GROUPNAME AS lev3,d.GROUPNAME AS lev4 from tbl_group_info a
    LEFT JOIN tbl_group_info b ON a.PARENTID  = b.GROUPID
    LEFT JOIN tbl_group_info c ON b.PARENTID  = c.GROUPID
    LEFT JOIN tbl_group_info d ON c.PARENTID  = d.GROUPID
    where a.GROUPID = '320100201712010942533991024gleax'

  • 相关阅读:
    ROS安装过程与常遇问题
    Linux中Vim工具的使用
    秋招总结
    SpringBoot项目打包war包步骤
    hiredis windows静态库编译
    Access去除字段值后面空格
    AspNetCore容器化(Docker)部署(四) —— Jenkins自动化部署
    AspNetCore容器化(Docker)部署(三) —— Docker Compose容器编排
    AspNetCore容器化(Docker)部署(二) —— 多容器通信
    AspNetCore容器化(Docker)部署(一) —— 入门
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/9071000.html
Copyright © 2020-2023  润新知