【问题标题】:MYSQL Join help. Get results based on number of comments in seperate comments table?MYSQL 加入帮助。根据单独评论表中的评论数量获取结果?
【发布时间】:2012-07-22 23:06:50
【问题描述】:

这里是初学者!我正在尝试编写一个查询,该查询将从“结果”表中选择评论最多的 3 个结果,这些 cmets 存储在单独的“cmets”表中。

results
 - id  
 - title    
 - body   
 - etc
 - etc

comments
 - id  
 - result_id
 - user_id
 - timestamp
 - comment

所以我需要从结果中选择所有,并按 results.id 和 cmets.result_id 之间的匹配数量排序,但我真的不知道从哪里开始!

非常感谢您的帮助,非常感谢!

【问题讨论】:

    标签: php mysql sql codeigniter join


    【解决方案1】:

    以下应该有效:

    SELECT r.id, COUNT(r.id) AS comment_count 
    FROM results r 
    INNER JOIN comments c 
    ON results.id = c.result_id 
    GROUP BY r.id 
    ORDER BY comment_count DESC
    

    您连接两个表,其中结果的 id 与 cmets 表中引用的 result_id 相同。然后按 result_id 对行进行分组以删除重复项。 COUNT() 函数汇总分组的行并显示它们的数量。

    然后根据生成的评论数对结果进行排序。

    您也可以使用LEFT OUTER JOIN,然后您将获得所有结果,也没有 cmets。是否要这个取决于您的需求。

    有关 SQL 连接的描述,请查看 What is the difference between "INNER JOIN" and "OUTER JOIN"?

    【讨论】:

      【解决方案2】:

      未经测试,但你可以做类似的事情

      SELECT  r.id  ,r.title, r.body
      FROM results r INNER JOIN (SELECT result_id, count(id) cnt FROM comments GROUP BY result_id) c
      ON r.id = c.result_id
      ORDER by c.cnt DESC
      

      【讨论】:

      • 请在发布答案时使用正确的连接语法。 (将 from 中的“,”替换为“join”,并将“where”更改为“on”。)
      • @GordonLinoff 感谢您的提示。考虑得太快了:-)
      【解决方案3】:

      也许可以试试这样的:

      SELECT COUNT(c.id) AS comment_count FROM results r
      LEFT JOIN comments c ON r.id=c.result_id
      GROUP BY result_id ORDER BY comment_count DESC LIMIT 3;
      

      【讨论】:

      • 您可能希望在 SELECT 子句中包含 results_id。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-07
      • 1970-01-01
      • 2016-03-21
      • 2012-08-23
      • 2012-04-20
      • 2019-02-18
      • 1970-01-01
      相关资源
      最近更新 更多