MySQL自定义函数递归查询

本文介绍了一个使用MySQL递归查询的函数,用于通过parentId查找所有子节点Id,并讨论了group_concat函数长度限制的问题及解决方法,包括临时修改和永久配置。

用于递归查找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服务即可。

转载于:https://www.cnblogs.com/MrZheng/p/9923495.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值