我有两张桌子:评论&照片
每条评论都是"已连接"通过照片ID到某张照片。我希望从某位作者(author_id)获取所有照片,并获取特定照片上所有评论的计数。我很抱歉我的英语,但我认为这是我描述它的最佳方式。
我想要一张表格:
到目前为止我尝试了什么(语法错误):
"SELECT p.id, p.rating, p.created_at, x.*
FROM photos p
LEFT JOIN
(
SELECT photo_id, COUNT(*) as cc
FROM comments
GROUP BY photo_id
) x
ON x.photo_id= p.id"
错误:"您的SQL语法出错;查看与您的MySQL服务器版本相对应的手册,以便在'"选择p.id,p.rating,p.created_at,x。* FROM photos {LEFT JOIN(SELECT&#39) ;在第1行"
照片表
评论表
答案 0 :(得分:3)
通过这种方式,它可以在需要更少资源的情况下更快地工作,并且更易于阅读:)
SELECT p.id, p.rating, p.created_at, count(c.id) AS cnt
FROM photos p
LEFT JOIN comments c ON c.photo_id=p.id
GROUP BY p.id
答案 1 :(得分:1)
作为一个注释,编写此查询的最快方法可能是:
SELECT p.*,
(SELECT count(*) FROM comments c WHERE c.photo_id = p.id) AS cnt
FROM photos p
WHERE p.author_id = 1;
为获得最佳效果,请在comments(photo_id)
上创建索引。
我之所以这样,是因为提及性能是一个考虑因素。 join
和group by
方法也是编写查询的好方法。