• 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
    
  • 相关阅读:
    Spring 事务管理tx,aop
    好的博客参考之Spring
    Spring 事务管理
    Eclipse+Tomcat+MAVEN+SVN项目完整环境搭建
    ssm框架搭建
    SSH整合不错的博客
    org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.my.service.ProductService] for bean with name 'productService' defi报错解决方法
    修改firefox的默认缩放比
    深入理解计算机系统笔记
    OnePlus5刷机后一直检查更新
  • 原文地址:https://www.cnblogs.com/jiangdewen/p/15115162.html
Copyright © 2020-2023  润新知