【问题标题】:Order by popularity MYSQL按受欢迎程度排序 MYSQL
【发布时间】:2015-06-27 19:14:08
【问题描述】:

我想做一个查询,正如标题所说,按受欢迎程度排序。 我所说的受欢迎程度是指评论最多的人,例如:

文章表

ID | TITLE 

评论表

ID | COMMENT | ARTICLE_ID

查询应该ORDER BY DESC ARTICLE title 取决于 cmets 的数量(ARTICLE_ID)。

例如:

'THIS IS A DUMMY TITLE' <= NUMBER OF COMENTS = 11
'THIS IS THE DUMMY TITLE' <= NUMBER OF COMENTS = 7 
'THIS IS OTHER DUMMY TITLE' <= NUMBER OF COMENTS = 3 

【问题讨论】:

    标签: mysql count sql-order-by


    【解决方案1】:
    select max(a.ID) as ARTICLE_ID, max(a.TITLE) as TITLE, sum(1) as COMMENTS
    from COMMENTS c
    join ARTICLE a on (a.ID = c.ARTICLE_ID)
    group by c.ARTICLE_ID
    order by 3 desc
    

    【讨论】:

    • 它有效,请您解释一下“按 3 desc 排序”是什么意思?
    • 哦,对了,我一般不使用数字来标识mysql中的列。非常感谢你们;)
    【解决方案2】:
    SELECT `commets`.*,`article`.title  
    FROM (SELECT COUNT(ARTICLE_ID) AS C, `ARTICLE_ID` FROM `commets` GROUP BY `ARTICLE_ID`) AS TAB JOIN `commets` 
    ON TAB.`ARTICLE_ID` = `commets`.`ARTICLE_ID`  JOIN `article` 
    ON `article`.`ID` = `commets`.`ARTICLE_ID` 
    ORDER BY TAB.C DESC
    

    说明

    好的,所以在这里我假设需要整个 cmets 行,所以为了不使用聚合函数来获取每一列,以防我们想在主选择中包含 GROUP BY,我创建了一个表,虽然内联选择以获取具有最高 cmets 的文章:

    (SELECT COUNT(ARTICLE_ID) AS C, `ARTICLE_ID` FROM `commets` GROUP BY `ARTICLE_ID`)    
    

    并将此表别名为TAB,然后将该表中的文章id与cmets表连接得到cmets列和article表得到文章的标题,然后对整个排序通过内联选择中的计数列 C 进行查询。

    【讨论】:

    • 不得不做一些改变,已经得到了正确的答案,但还是谢谢。
    猜你喜欢
    • 2016-03-10
    • 2011-08-16
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多