MySQL自定义函数递归查询

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MySQL⾃定义函数递归查询
⽤于递归查找Id(通过parentId关联)参数为int 类型的值:
CREATE DEFINER=`root`@`%` FUNCTION `getChildList`(rootId INT) RETURNS text CHARSET utf8
BEGIN
DECLARE sTemp text;
DECLARE sTempChd text;
SET sTemp ='$';
SET sTempChd =cast(rootId as CHAR);
WHILE sTempChd is not null DO
SET sTemp = concat(sTemp,',',sTempChd);
SELECT group_concat(id) INTO sTempChd FROM sys_company where FIND_IN_SET(parent_id,sTempChd)>0;
END WHILE;
RETURN sTemp;
END
通常 group_concat 有长度限制,当结果⼤于这个限制时就会导致查询出的数据不全,解决⽅案:改变group_concat 的最⼤长度。

⾸先查询⼀下⽬前group_concat 的长度限制(默认好像是1024):
SELECT@@global.group_concat_max_len;
修改长度:
SET GLOBAL group_concat_max_len=102400;
修改后可以在运⾏下查询命令,看⼀下长度是否修改成功。

但这种⽅法mysql服务重启后就会失效。

彻底修改需要修改mysql的配置⽂件:
在MySQL配置⽂件中my.conf或my.ini中添加:
#[mysqld]
group_concat_max_len=102400
或group_concat_max_len = -1 # -1为最⼤值
重启MySQL服务即可。

相关文档
最新文档