zoukankan      html  css  js  c++  java
  • 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服务即可。

  • 相关阅读:
    springboot整合swagger2
    关于lombok
    RSA加密和AES加密
    守护进程监控tomcat并自启
    java按照目录结构压缩文件夹以及文件夹内内容
    wxx
    附加作业
    软工作业3
    软工作业2
    软工作业一 201621123070陈伟杰
  • 原文地址:https://www.cnblogs.com/MrZheng/p/9923495.html
Copyright © 2011-2022 走看看