2013-02-05 125 views
0

我在mysql查询中遇到group_concat存在问题:group_concat在mysql查询提前停止

它停在513号码!

这是正常的查询,并返回813行:

SELECT * 
FROM survey_votes 
WHERE sid = '4' 

和现在的问题是与此查询:

​​

这将返回1行包含数组“myoids”到513个字符串。

表 '调查' 的strucutr:

sid int(11)   
stitle varchar(255) 
sdesc text  
soptions text  
sdate datetime 
active int(1) 

survey_votes:

vid int(11) 
sid int(11)  
uid int(11)  
uip varchar(255)  
oid int(11)  
sdate datetime 

myoids只包含高达513行:

Array 
(
    [0] => 1 
    [1] => 1 
    [2] => 3 
    ......... 
    [511] => 1 
    [512] => 
) 
+0

有趣。你的目的是为了问题吗?纠正它是不可能的。 – Burkhard

回答

1

这是因为MySQL某一限度后截断的GROUP_CONCAT结果:

的结果被截断其具有 1024的缺省值是由 group_concat_max_len系统变量给定的最大长度, 。

尝试使用SET命令增加group_concat_max_len变量的值:

SET SESSION group_concat_max_len = 1024 * 1024; -- 1MB 
+0

是的,这是正确的答案!现在我该如何解决并增加它? –

+0

SET [GLOBAL | SESSION] group_concat_max_len = 2048! –

+0

但仍然坚持513!我应该重新启动mysql服务吗? –

0

查询应该是

SELECT s.*,  
GROUP_CONCAT(v.oid) AS myoids 
FROM survey s 
LEFT JOIN survey_votes v ON s.sid=v.sid 
WHERE v.sid='4' 
     // here was the problem it should be v.sid not s.sid 

因为在第一个查询你是从哪里survey_votessid = '4'

SELECT * 
FROM survey_votes 
WHERE sid = '4' 
+0

不错的一点,但仍然坚持513! –

0

选择多少行做到这一点的回报:

SELECT * 
FROM survey 
WHERE sid = '4' 

这是否返回513行?

+0

只有1个,其中包含有关调查的信息。 –