-- =======================向上递归=====================
delimiter $$
drop function if exists get_child_list$$
create function get_child_list(in_id varchar(50)) returns varchar(4000)
begin
declare ids varchar(4000) default '';
declare tempids varchar(4000);
set tempids = in_id;
while tempids is not null do
-- 第一步,将输入的当前节点先保存到返回集合中
set ids = CONCAT_WS(',',ids,tempids);
-- 第二步:将查询出来的数据存放到临时保存集合用于查询递归
select GROUP_CONCAT(id) into tempids from dept where FIND_IN_SET(pid,tempids)>0;
end while;
return ids;
end
$$
delimiter ;
SELECT * from dept where FIND_IN_SET(id,get_child_list('1003'));
-- =======================向下递归=====================
delimiter $$
drop function if exists get_parent_list$$
cr

本文介绍了如何在MySQL中使用递归函数处理层级数据。分别展示了向上递归获取子节点和向下递归获取父节点的函数创建过程,利用GROUP_CONCAT函数拼接ID并进行递归查询。同时提醒注意,GROUP_CONCAT函数默认有长度限制,可以通过配置my.cnf文件进行调整。
最低0.47元/天 解锁文章
790

被折叠的 条评论
为什么被折叠?



