MySQL递归获取伞下所有ID函数

需要在MySQL数据库中配置

  1. group_concat_max_len = 4294967295

函数如下:

CREATE DEFINER=`root`@`%` FUNCTION `queryChilds`(`uid` varchar(32)) RETURNS longtext CHARSET utf8
BEGIN
DECLARE sTemp LONGTEXT;
DECLARE sTempChd LONGTEXT;
SET sTemp = '';
SET sTempChd = uid;
WHILE sTempChd is not NULL DO
SET sTemp = CONCAT(sTemp,',',sTempChd);
SELECT group_concat(id) INTO sTempChd FROM t_user where FIND_IN_SET(referrer,sTempChd)>0;
END WHILE;
return sTemp;
END

MySQL根据配置文件会限制Server接受的数据包大小。

有时候大的插入和更新会受 max_allowed_packet 参数限制,导致写入或者更新失败。(比方说导入数据库,数据表)

mysql> show VARIABLES like '%max_allowed_packet%';
+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| max_allowed_packet       | 1024       |
| slave_max_allowed_packet | 1073741824 |
+--------------------------+------------+