group_concat出现问题被截断怎么办?

出处:http://blog.csdn.net/wujiangwei567/article/details/42418547

以下为全文转载:

【group_concat】

该函数的作用就是将,查询到的结果以 ',' 分隔的
方式串联起来组成一个字符串,经常地,我们可以将它的结果拼接在

sql的in子句中,来做可选参数,非常方便

[sql]  view plain  copy
  1. 如:select group_concat(id) ids from userinfo where usertype='vip'  

但是数据量一但大了就会出意想不到的问题。
这是为什么呢;因为MySql默认给 该函数结果的长度是1024

我们可以用命令查出来:

[sql]  view plain  copy
  1. mysql> show variables like '%group_concat%';  
  2. +----------------------+-------+  
  3. | Variable_name        | Value |  
  4. +----------------------+-------+  
  5. | group_concat_max_len | 1024  |  
  6. +----------------------+-------+  
  7. 1 row in set (0.00 sec)  

可以改吗,答案是肯定的,这里我们从两个方面探讨这个问题;

1、从mysql着手
①临时性的更改
我们可以在查询之前添加子句

[sql]  view plain  copy
  1. mysql> set group_concat_max_len = 99999;  
  2. Query OK, 0 rows affected (0.00 sec)  
  3.   
  4. mysql> show variables like '%group_con%';  
  5. +----------------------+-------+  
  6. | Variable_name        | Value |  
  7. +----------------------+-------+  
  8. | group_concat_max_len | 99999 |  
  9. +----------------------+-------+  

可不可以无限大,可以将值 改为 -1 。
但是这会有一个问题,断开连接后,值又恢复到 1024,那么我们看第二种方法

②永久性修改
我们找到my.ini 或 my.conf 文件
该变量是没有在这些文件中声明的,我们只需要加上下面这句即可:

[plain]  view plain  copy
  1. group_concat_max_len = -1  # -1为最大值或填入你要的最大长度  

然后重启MySql ,ok没问题了

2、我们从PHP的角度着手
从程序的角度看,我们也不用大动干戈,做什么呢,做一个循环,我们照样能连接

[sql]  view plain  copy
  1. $sql = "select id from from userinfo where usertype='vip'";  

接着我们将结果循环出来;

[php]  view plain  copy
  1. $arr = array();  
  2. foreach($res as $id){  
  3.    $arr[] = $id;  
  4. }  
  5. $ids = implode(',',$arr);  

ok,现在也大功告成了!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值