MySQL自定義函式遞迴查詢
阿新 • • 發佈:2018-11-07
用於遞迴查詢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 nullDO 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服務即可。