最近需要写一个文件夹递归操作,发现mysql中没有类似于oracle中的start with connect by prior语句递归,所以研究了一下,发现函数递归比较方便,这里记录一下
DROP FUNCTION IF EXISTS findDir;//如果存在则删除这个函数
CREATE FUNCTION findDir//5(areaId VARCHAR(255)//1)
RETURNS VARCHAR(4000)
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(ID)//2 INTO sTempChd FROM mam_program_contents//3 WHERE FIND_IN_SET(PARENT_ID//4,sTempChd)>0;
END WHILE;
RETURN sTemp;
END;
1.这是输入参数的类型
2.这是表字段
3这是表名称
4这是表中父级字段
5这是你要定义的函数名
写好函数后,可直接使用sql语句进行查询
SELECT ID from mam_program_contents where FIND_IN_SET(ID,findDir("要查询的id"))