Mysql连接表和计数行

时间:2014-05-09 20:39:44

标签: mysql sql database

我有两张桌子:评论&照片

每条评论都是"已连接"通过照片ID到某张照片。我希望从某位作者(author_id)获取所有照片,并获取特定照片上所有评论的计数。我很抱歉我的英语,但我认为这是我描述它的最佳方式。

我想要一张表格:

  • id(照片表)
  • 评级(照片表)
  • created_at(照片表)
  • number_of_comments(评论表)

到目前为止我尝试了什么(语法错误):

"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行"

照片表

  • ID
  • author_id
  • filename
  • caption
  • 评级
  • flags
  • IS_ACTIVE

评论表

  • ID
  • 评论
  • AUTHOR_ID
  • photo_id
  • created_at
  • 标志
  • IS_ACTIVE

2 个答案:

答案 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)上创建索引。

我之所以这样,是因为提及性能是一个考虑因素。 joingroup by方法也是编写查询的好方法。