繁体   English   中英

MySQL连接表并计数行

[英]Mysql join table and count rows

我有两个表格:评论和照片

每个评论都通过照片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服务器版本相对应的手册中查找在'附近使用的正确语法。” SELECT p.id,p.rating,p.created_at,x。* FROM photos左联接(在第1行选择“

照片表

  • ID
  • AUTHOR_ID
  • 文档名称
  • 字幕
  • 评分
  • 活跃

评论表

  • ID
  • 评论
  • AUTHOR_ID
  • photo_id
  • created_at
  • 活跃

这样,它将以更少的资源需求更快地工作,并且更容易阅读:)

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

注意,编写此查询的最快方法可能是:

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方法也是编写查询的好方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM