按人气MYSQL排序

时间:2015-06-27 19:14:08

标签: mysql count sql-order-by

我想提出一个查询,正如标题所说,按人气排序。 我的意思是受欢迎程度,例如:大多数人都有这样的人:

文章表

ID | TITLE 

评论表

ID | COMMENT | ARTICLE_ID

查询应ORDER BY DESC ARTICLE title,具体取决于评论数量(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 

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

<强>解释

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

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

并将此表别名为 TAB ,然后在此表中加入文章id与注释表以获取注释列和文章表以获取文章的标题,然后命令整个通过内联选择中的计数列 C 进行查询。