2015-06-27 70 views
0

我想进行一个查询,如标题所示,按受欢迎程度排序。 通过普及我的意思是,一个与大多数评析例如:按热门程度排序MYSQL

article表

ID | TITLE 

comments表

ID | COMMENT | ARTICLE_ID 

查询应ORDER BY DESCARTICLE 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
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 
+0

它的工作原理,你能解释一下“3位顺序”是什么意思? – dyzz1337

+0

哦,对,我通常不使用数字来标识mysql中的列。谢谢很多家伙;) – dyzz1337

+0

Sum(1)确实令人印象深刻,值得一票:) – KAD

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组成。

+0

不得不作出一些改变,已经得到了正确的答案,但无论如何感谢。 – dyzz1337