从另一个表中按计数排序

Hav*_*avi 1 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
Run Code Online (Sandbox Code Playgroud)

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

我的 2 个表:

文章

id
Run Code Online (Sandbox Code Playgroud)

统计数据

pid <- same as article id
Run Code Online (Sandbox Code Playgroud)

查看其他示例,我缺少左连接。只是无法解决如何工作。我现在的查询是这样的: $query = "SELECT *, COUNT(pid) AS views FROM statistics GROUP BY pid ORDER BY views DESC";

任何帮助是极大的赞赏!

MvG*_*MvG 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
Run Code Online (Sandbox Code Playgroud)

想法:

  • 使用连接合并两个表
  • 如果文章没有统计,用 填充NULL,即使用左连接
  • COUNT只计算非NULL值,所以按右表计算以给出正确的零结果
  • GROUP BY 为每篇文章准确获取一个结果行,即对每篇文章单独统计统计信息