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
posted @   临渊不羡渔  阅读(289)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示