zoukankan      html  css  js  c++  java
  • mysql递归查询函数

    获取祖先区划列表

    -- 获取祖先区划列表
    CREATE DEFINER=`root`@`%` FUNCTION `getParentList`(`rootId` varchar(10000)) RETURNS varchar(10000) CHARSET utf8
        DETERMINISTIC
    BEGIN
    		DECLARE sParentList VARCHAR(10000); -- 父区划集(上面所有层的父区划合集)
    		DECLARE sParentTemp VARCHAR(10000); -- 区划缓存
    		-- 查出上一层层父区划赋值给区划缓存
    		SELECT GROUP_CONCAT(parentid) INTO sParentTemp FROM T_SYS_REGION WHERE areaid = rootId;
    		-- 如果区划缓存不为空
    		WHILE sParentTemp IS NOT NULL DO
    				-- 为父区划集赋值(如果父区划集不为空则在前面加上区划缓存,否则赋值区划缓存)
    				IF(sParentList IS NOT NULL) THEN
    					SET sParentList = CONCAT(sParentTemp,',',sParentList);
    				ELSE
    					SET sParentList = sParentTemp;
    				END IF;
    				-- 在当前n层父区划的基础上查出上n+1层的父区划赋值给区划缓存
    				SELECT GROUP_CONCAT(parentid) INTO sParentTemp FROM T_SYS_REGION WHERE FIND_IN_SET(areaid,sParentTemp)>0;
    		END WHILE;
    		RETURN sParentList;
    END
    
    

    获取所有后代区划列表

    -- 获取所有后代区划列表
    CREATE DEFINER=`root`@`%` FUNCTION `getChildreList`(`rootId` varchar(10000)) RETURNS varchar(10000) CHARSET utf8
        DETERMINISTIC
    BEGIN
        DECLARE sChildrenList VARCHAR(10000); -- 子区划集(下面所有层的子区划合集)
        DECLARE sChildrenTemp VARCHAR(10000); -- 区划缓存
    		-- 查出下一层子区划赋值区划缓存
    		SELECT GROUP_CONCAT(AREAID) INTO sChildrenTemp FROM T_SYS_REGION WHERE PARENTID = rootId;
    		-- 如果区划缓存不为空
        WHILE sChildrenTemp IS NOT NULL DO
    				-- 为子区划集赋值(如果子区划集不为空则在前面加上区划缓存,否则赋值区划缓存)
    				IF (sChildrenList IS NOT NULL)
    				THEN
    						SET sChildrenList = CONCAT(sChildrenTemp, ',', sChildrenList);
    				ELSE
    						SET sChildrenList = CONCAT(sChildrenTemp);
    				END IF;
    				-- 在当前n层子区划的基础上查出下n+1层的子区划赋值给区划缓存
    				SELECT GROUP_CONCAT(AREAID) INTO sChildrenTemp FROM T_SYS_REGION WHERE FIND_IN_SET(PARENTID, sChildrenTemp) > 0;
    		END WHILE;
        RETURN sChildrenList;
    END
    

    查出上线下树区划列表

    -- 查出上线下树区划列表
    CREATE DEFINER=`root`@`%` FUNCTION `getAreaIds`(`rootId` varchar(10000)) RETURNS varchar(10000) CHARSET utf8
        DETERMINISTIC
    BEGIN
    		DECLARE areaIds VARCHAR(10000);
    				SELECT CONCAT_WS(',',getParentList(rootId),rootId,getChildreList(rootId)) INTO areaIds;
    		RETURN areaIds;
    END
    
  • 相关阅读:
    centos部署bladex boot 之docker安装
    git ssh key创建和github使用
    Debian root登录设置
    Linux软件源
    Secure backup
    Python简易web服务
    好久没有更新博客了
    Python实现无向图最短路径
    DWZ使用中遇到的坑
    tronado学习
  • 原文地址:https://www.cnblogs.com/jiangdewen/p/15115162.html
Copyright © 2011-2022 走看看