MySQL树表递归函数实现
内容纲要
递归函数
delimiter /
DROP FUNCTION IF EXISTS `sist`.`getChild`/
CREATE FUNCTION `getChild`(rootId varchar(36))
RETURNS VARCHAR(1000)
BEGIN
DECLARE ptemp VARCHAR(1000);
DECLARE ctemp VARCHAR(1000);
SET ptemp = '';
SET ctemp = rootId;
WHILE ctemp IS NOT NULL DO
SET ptemp = concat(ptemp, ',', ctemp);
SELECT group_concat(dept_id)
INTO ctemp
FROM sys_dept
WHERE FIND_IN_SET(parent_id, ctemp) > 0;
END WHILE;
RETURN ptemp;
END;
对获取的集合进行使用
直接使用集合会被MySQL引擎转换为('100,101') 的字符格式,不是集合格式,需要使用findinset 将集合进行处理
示列:
SELECT *
FROM sist_dict_dept d
WHERE FIND_IN_SET(d.dept_id,(
SELECT getChild(dept_id)
FROM sys_user u
WHERE u.user_id = 3));
``
共有 0 条评论