zoukankan      html  css  js  c++  java
  • 父节点递归查询和子节点递归查询函数

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

    由于在项目中用到了向上查询父节点的递归查询和向下查询子节点查询的递归查询,由于在实现过程中,写递归查询的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'

  • 相关阅读:
    [刘阳Java]_eayui-pagination分页组件_第5讲
    [刘阳Java]_easyui-draggable拖动组件_第4讲
    [刘阳Java]_easyui-panel组件入门级_第3讲
    [刘阳Java]_TortoiseSVN基础应用_第1讲
    [刘阳Java]_SpringMVC文件上传第2季_第11讲
    [刘阳Java]_Spring中IntrospectorCleanupListener的用途【补充】_第16讲
    使用fetch代替ajax请求 post传递方式
    react购物车demo
    react-redux异步数据操作
    redux模块化demo
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/9071000.html
Copyright © 2011-2022 走看看