mysql查询中的group_concat会提前停止

时间:2013-02-05 07:25:20

标签: php mysql

我在mysql查询中遇到了group_concat的问题:

停在513号码上!

这是普通查询,它返回813行:

SELECT * 
FROM survey_votes
WHERE sid =  '4'

现在问题出在这个问题上:

SELECT s.*,     
    GROUP_CONCAT(v.oid) AS myoids
    FROM survey s
    LEFT JOIN survey_votes v ON s.sid=v.sid
    WHERE s.sid='4'

这将返回包含数组'myoids'的1行,最多包含513个字符串。

表'调查'的结构:

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] => 
)

3 个答案:

答案 0 :(得分:1)

这是因为MySQL在某个限制之后截断GROUP_CONCAT的结果:

  

结果被截断为由。给出的最大长度   group_concat_max_len系统变量,其默认值为   1024。

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

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

答案 1 :(得分: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_votes sid = '4'

SELECT * 
FROM survey_votes
WHERE sid =  '4'

答案 2 :(得分:0)

这会返回多少行:

SELECT * 
FROM survey
WHERE sid =  '4'

这会返回513行吗?