2012-08-28 48 views
0

我运行这个SQL查询SQL与GROUP_CONCAT

$sql = "select images.image, images.comment as feedDescription, 
     customers.fullName, CONCAT('[', GROUP_CONCAT(DISTINCT likes.uid),']') as likes, 
     CONCAT('[', GROUP_CONCAT(DISTINCT CONCAT('{\"userid\":\"', comments.fid, '\", \"comment\":\"', comments.comment, '\"}') separator ','),']') as comments 
     FROM images 
     LEFT JOIN customers on images.client_id = customers.client_id 
     LEFT JOIN likes on images.image = likes.image 
     LEFT JOIN comments on images.image = comments.image 
     WHERE images.fid=:userID 
     ORDER BY images.image LIMIT $offset,$limit"; 

唯一的问题是,我只得到了第一行...

我有图像表,客户表(取名字(我在图片中得到的id),喜欢桌子(在图片上做过“喜欢”的人)和评论(在桌子上写下“评论”的人)

+1

欢迎来到StackOverflow:如果您发布代码,XML或数据样本,请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(“{}”)格式和语法突出显示它! –

+0

'$ limit'的价值是什么?你确定你没有要求一行('images.fid =:userID')?请发布一个示例用户数据(来自所有4个表格)和输出 – alfasin

+0

嗨,限制为20并且偏移为0 –

回答

1

您正在使用聚合功能一个查询,所以MySQL自动返回一行 - 所有数据的聚合。

在其他数据库中,这会产生错误,因为您有混合的聚合列和非聚合列。这是MySQL的(错误)功能,称为“隐藏列”。

通过添加一组到您的查询来解决这个问题:

group by images.image, images.comment, customers.fullName 

确保WHERE子句之后和ORDER BY之前添加此。

+1

这是正确的,但我不会称之为功能。如果查询没有正确实现(如这个),猜测可能意味着什么是不好的行为 – Argeman

+0

我很乐意解决它,并了解最新的解决方法。 –

+0

btw我收到语法错误或访问冲突:1064您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以在正如上面添加组之后使用'group by images.image,images.comment as feedDescription,customers.fullName LIM'附近的正确语法使用 –