带有GROUP_CONCAT的sql

时间:2012-08-28 14:03:21

标签: mysql

我正在运行此SQL查询

$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 个答案:

答案 0 :(得分:1)

您正在对查询使用聚合函数,因此MySQL只会自动返回一行 - 所有数据的聚合。

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

在您的查询中添加一个分组以解决问题:

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

请务必在WHERE子句之后和ORDER BY之前添加它。