1. 程式人生 > >MySQL自定義函式遞迴查詢

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