从另一个表中按计数排序

时间:2012-07-10 10:23:56

标签: mysql count sql-order-by left-join

我希望发布此信息是合法的,因为我知道有关此主题的其他类似帖子。但我无法让其他解决方案工作,所以试图发布我自己的方案。几乎就像这样的其他例子,我不确定他们如何使用表名和行。它是通过标点符号吗?

 SELECT bloggers.*, COUNT(post_id) AS post_count
    FROM bloggers LEFT JOIN blogger_posts 
    ON bloggers.blogger_id = blogger_posts.blogger_id
    GROUP BY bloggers.blogger_id
    ORDER BY post_count

我有一个包含文章的表格,以及每次阅读文章时都会获得新记录的统计表格。我试图通过计算统计表中该文章ID的记录数来进行查询以对我的文章表进行排序。就像“按视图排序”功能一样。

我的2张桌子:

制品

id

统计

pid <- same as article id

查看其他示例我缺少左连接。只是无法绕过如何工作。我此刻的查询看起来像这样:     $ query =“SELECT *,COUNT(pid)AS views FROM statistics GROUP BY pid ORDER BY views DESC”;

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

SELECT article.*, COUNT(statistics.pid) AS views
FROM article LEFT JOIN statistics ON article.id = statistics.pid
GROUP BY article.id
ORDER BY views DESC

思路:

  • 使用连接组合两个表
  • 如果文章没有统计信息,请填写NULL,即使用左连接
  • COUNT仅计算非NULL值,因此请按右表计算以得出正确的零结果
  • GROUP BY为每篇文章准确获取一个结果行,即单独统计每篇文章的统计信息