• 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服务即可。

  • 相关阅读:
    HDU 5091 Beam Cannon (扫描线思想)
    UVA12904 Load Balancing(中途相遇法)
    linux虚拟机时间同步
    linux shell
    项目bug
    定时发送邮件出现问题
    kafka里面的topic消费情况查看
    kafka常见命令
    HiJson简要说明
    zookeeper、hbase常见命令
  • 原文地址:https://www.cnblogs.com/MrZheng/p/9923495.html
Copyright © 2020-2023  润新知