执行连接和计数的正确mysql查询是什么?


What is the correct mysql query to perform a join and a count?

我有两个表,一个包含关于图像的信息,另一个包含关于对图像的评论的信息。

我需要有一个查询,显示对一个查询图像的评论计数。我尝试了以下方法:

SELECT l.img_id, COUNT(c.comment_id) AS comment_count FROM tbl_images l, tbl_image_comments c WHERE l.img_id = c.img_id;

,但这不能正确报告,因为它只计算所有的注释表。

有谁能帮忙吗?)

您在这里所做的是制作图像和评论表的CROSS JOIN:来自图像的每一行都与所有来自评论的行"配对",反之亦然(这解释了评论计数),然后您使用WHERE子句过滤结果数据集。

应该做的是一个LEFT OUTER JOIN,它"配对"的每一行从图像只有那些行从注释满足特定条件:

SELECT l.img_id, COUNT(c.comment_id) AS comment_count
FROM tbl_images l
LEFT JOIN tbl_image_comments c ON l.img_id = c.img_id

您需要为计数指定一个分组。

尝试添加

GROUP BY l.img_id

作为选项:

SELECT 
  l.img_id, 
  (select COUNT(*) from  tbl_image_comments c l.img_id = c.img_id) AS comment_count 
FROM 
  tbl_images l;