1

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

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

任何帮助是极大的赞赏!

4

1 回答 1

5
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为每篇文章准确获取一个结果行,即分别统计每篇文章的统计数据
于 2012-07-10T11:16:15.753 回答