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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM