CREATE FUNCTION `getTreeCategory`(rootId INT) RETURNS VARCHAR(1000) CHARSET utf8
BEGIN
DECLARE sTemp VARCHAR(1000);/*定义一个临时字段来存放所有的类别与子类别*/
DECLARE sTempChd VARCHAR(1000);/*定义一个临时字段,来得到当前类别的子类别*/
SET sTemp = '';
SET sTempChd =CAST(rootId AS CHAR);
WHILE sTempChd IS NOT NULL DO
SET sTemp = CONCAT(sTemp,',',sTempChd);/*将以前类别与现在查询类别进行合并*/
/*将每次查到的子id形成一个字符组,放到sTempChd里,如果sTempChd为null就停止循环*/
SELECT GROUP_CONCAT(catid) INTO sTempChd FROM tblName WHERE FIND_IN_SET(parentid,sTempChd)>0;
END WHILE;
SET sTemp = SUBSTRING(sTemp,2,CHAR_LENGTH(sTemp));
RETURN sTemp;
END$$
测试结果
select getTreeCategory(0);