mysql - 此查询需要哪种类型的联接?

标签 mysql join

出于某种原因,我似乎总是在连接方面遇到问题。无论如何,我有一个文章表和一个文章评论表。我想根据文章的评论数量对文章表中的行进行排序。所以评论表中的一行将有一个文章 id 列。现在,我的查询仅返回文章表中的行,该行具有链接到它的评论表中的行(仅具有评论的文章)。我想返回文章表中的所有行,无论它是否有评论(您可以忽略此处的内部联接),但我仍然希望能够按每篇文章的评论数对文章结果进行排序,即使它是0。我希望你理解。

这是我当前的查询:

   SELECT 
      a.article_id, a.type, 
      p.article_id, p.platform_id, 
      c.comment_id, c.article_id, COUNT(c.comment_id) AS comments
   FROM articles AS a
   INNER JOIN article_plat_assoc AS p ON a.article_id = p.article_id 
   LEFT JOIN article_comments AS c ON a.article_id = c.article_id 
   WHERE p.platform_id = 1 
   ORDER BY comments DESC
   LIMIT 15

这是 SQLFiddle: http://sqlfiddle.com/#!2/db1e8/1/0

最佳答案

因为您有聚合函数Count,所以您需要GROUP BY至少一个字段,否则您将返回一行。

SELECT
  a.article_id, a.title, c.comment_id, c.article_id, COUNT(c.comment_id) AS comments
FROM articles AS a
LEFT JOIN article_comments AS c ON a.article_id = c.article_id
GROUP BY a.article_id
ORDER BY comments DESC
LIMIT 15

DEMO

欲了解更多信息,请阅读MySQL Extensions to GROUP BY

关于mysql - 此查询需要哪种类型的联接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24490480/

相关文章:

mysql - 如何使用when方法在查询中插入select和join方法?

mysql - Postgresql 合并来自 JOIN 的相同列

java - 在 Java 中显示列表与在 Python 中一样优雅

mysql - Zend 2 sql查询问题

php - 在 json 中连接多个表

mysql - (新手)MySQL查看

php - Zend_Db 和基于日期的查询

php - Wordpress:500 内部服务器错误,使用 $wpdb 可能出现问题

java - Hibernate:在不实际使用任何主/外键关系的情况下使用 OneToMany

mysql - 在同一 SQL 查询中使用多个 CASE ... WHEN 语句时会发生什么?