根据父id递归查询所有子节点
创建函数:
CREATE DEFINER=`root`@`%` FUNCTION `xxdg`(areaId INT) RETURNS varchar(4000) CHARSET utf8
BEGIN
DECLARE sTemp VARCHAR(4000);
DECLARE sTempChd VARCHAR(4000);
SET sTemp='$';
SET sTempChd = CAST(areaId AS CHAR);
WHILE sTempChd IS NOT NULL DO
SET sTemp= CONCAT(sTemp,',',sTempChd);
SELECT GROUP_CONCAT(menu_id) INTO sTempChd FROM sys_menu WHERE FIND_IN_SET(parent_id,sTempChd)>0;
END WHILE;
RETURN sTemp;
END
查询语句:
select * from sys_menu where FIND_IN_SET(menu_id,xxdg(1));
结果:
简单说明一下:
parent_id 是父节点
menu_id 是当前节点
向上递归传入的参数是最下级的节点,而向下递归传入的是最上级的节点(并且上面函数中parent_id 和menu_id 的位置要互换)
注意:这样的循环是有风险的,可自行添加适合的条件跳出循环防止锁死