获取祖先区划列表
-- 获取祖先区划列表
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