这是我的表的简化版本:

图片

image_id       user_id     image_path
-------------------------------------
1              1           TEXT
2              2           TEXT


投票数

vote_id           image_id       user_id
-----------------------------------------
1                 1              1
2                 1              2
3                 2              1
4                 1              3
5                 1              4


如您所见,与图片#1相关的票数为4。

我目前有以下代码:

SELECT images.*, votes.*
FROM images
LEFT JOIN votes
ON images.image_id = votes.vote_id
GROUP BY images.image_id;


这样做基本上是返回每张单个图像以及该图像被投票多少次。这是所需的操作,但是...它只返回一个表决,而不返回与该图像关联的所有表决。

为什么需要所有选票?在我的循环中,我想检查用户是否已对图像进行投票,以及是否已投票,所以不显示投票按钮。由于我的查询仅返回与图像相关的众多投票中的一票,因此我无法知道其他用户已经投票了什么。

有没有一种方法可以使查询在仅返回一个图像的同时保留与该图像相关的所有投票?

谢谢,我希望这是有道理的。

最佳答案

您可以使用group_concat()返回在列表中投票的所有用户ID:

SELECT i.*, group_concat(v.user_id)
FROM images i LEFT JOIN
     votes v
     ON i.image_id = v.vote_id
GROUP BY i.image_id;

关于mysql - 有没有一种方法可以使查询保留与另一行关联的所有行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21070246/

10-12 17:25
查看更多