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));

``

THE END
分享
二维码
< <上一篇
下一篇>>