我有两个表,一个包含关于图像的信息,另一个包含关于对图像的评论的信息。
我需要有一个查询,显示对一个查询图像的评论计数。我尝试了以下方法:
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;