【问题标题】:list 10 maximum commented news in mysql列出 10 个 mysql 中最多评论的新闻
【发布时间】:2013-04-08 01:00:58
【问题描述】:

我有两个表新闻和 cmets:

新闻:newsId、newsTitle、newsDate、newsReadCount

cmets:ID、newsID、评论、日期

我根据两个日期之间的值 newsReadCount 选择了 10 行具有最大读取量:

SELECT * FROM news WHERE DATE(newsDate) BETWEEN '20120414' AND '20130414' ORDER BY newsReadCount DESC LIMIT 0, 10

在这里,我想根据 cmets 表的关系 newsID 从两个日期之间的新闻表中选择 10 个带有 newsTitle 的新闻,其中总评论数具有最大 cmets。我如何在mysql中查询这个?我需要加入吗。请帮助我,我是 mysql 新手。

cmets表newsID为news表的newsID主键值。

已编辑:

选择两个日期之间的新闻,结果如下

结果:

| newsTitle  | Total Comments |     
-------------------------------    
| onenews    |  25            |    
| another    |  30            |

【问题讨论】:

    标签: mysql sql select


    【解决方案1】:

    您需要joingroup byorder bylimit

    SELECT
        news.newsTitle, COUNT(comments.ID) AS `Total Comments`
    FROM news INNER JOIN comments ON
        news.newsId = comments.newsID AND news.newsDate BETWEEN '20120414' AND '20130414'
    GROUP BY news.newsId
    ORDER BY `Total Comments` DESC
    LIMIT 10;
    

    请参阅sql fiddle

    【讨论】:

    • 我们可以用这个单一查询选择所有 10 条新闻的所有 cmets,以便我使用 php 列出所有 10 条新闻及其评论
    • 不,您不能在同一个查询中同时获得评论计数和评论详细信息。无论如何,它是如何工作的?对于您想要显示总计数的每条评论?
    • 你可以使用一个名为group_concat的函数,它看起来像这样:sqlfiddle.com/#!2/cfb25/18/0
    • 我在字段值中使用了 group_concat(cmets.ID) 结果显示 [BLOB - 1.0 KiB] 而不是 phpmyadmin 中的 1,3,54,12
    【解决方案2】:

    我认为你可以使用

    SELECT n.newsTitle, count(c.ID) as totalCount
    FROM   News n LEFT JOIN Comments c ON n.newsId = c.newsID
    WHERE  DATE(n.newsDate) BETWEEN '20120414' AND '20130414'
    GROUP BY n.newsTitle
    ORDER BY totalCount DESC
    LIMIT   10
    

    【讨论】:

    • 为什么按 newsTitle 而不是 newsId 分组?也许两个新闻有相同的标题。此外,在加入时同时使用onwhere 也不是一个好习惯,您可以将where 子句内容复制到on 子句。
    猜你喜欢
    • 1970-01-01
    • 2012-01-17
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    相关资源
    最近更新 更多