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'

  • 相关阅读:
    MotionEvent的getX(),getY()与getRawX(),getRawY()区别
    ProgressBar
    Android UI-SlidingMenu侧滑菜单效果
    CentOS采用grub进 single状态
    C++外观设计模式模式(三)
    01背包和背包完全
    Android开展Exception:ActivityNotFoundException: Unable to find explicit activity class
    圆通数据库泄露
    学生有自己的, 其他生活
    串行卧重建14:我们是等自己测试的主动性
  • 原文地址:https://www.cnblogs.com/zjdxr-up/p/9071000.html
Copyright © 2011-2022 走看看