2011-06-22 130 views
0

我在我的應用程序中實現了熱門功能,我將從數據庫中選擇最受歡迎的帖子。問題是我需要獲得最受歡迎的最喜歡和最多的評論。我剛剛嘗試過:按兩列排序MySQL

SELECT * FROM db ORDER BY `likesCount`,`commentsCount` DESC LIMIT $from," . ($to-$from) 

但是,這將顯示數量上升的價值。我怎樣才能得到它,以便它測量numberOfLikes和numberOfComments並選擇最流行的一個?

+0

你用什麼標準來衡量相對流行度?你是否想過使用像likes + comments這樣簡單的東西,還是你正在對另一個加權? – Elk

+0

稱重比評論更喜歡。 –

回答

3

您可以指定是否按每個搜索字段的升序或降序排序。

SELECT * FROM `db` ORDER BY `likesCount` DESC, `commentsCount` DESC 

這樣說,你將無法同時選擇最喜歡和最多評論的人。你必須想出一個公式來解決這個問題。例如,下面的例子中找到喜歡和評論的數量之間的給定「ID」的最大值:

SELECT * FROM `db` GROUP BY `id` ORDER BY GREATEST(`likesCount`, `commentsCount`) DESC 

另一種方法是將它們加在一起:

SELECT * FROM `db` ORDER BY `likesCount` + `commentsCount` DESC 
+0

我只是試過,我不完全確定它的工作原理。我在'valueOfLikes'下面得到了'numberOfLikes':「627」,「numberOfComments」:「100」':「676」,「numberOfComments」:「27」' –

+0

@XcodeDev - 通過使用'GREATEST' ,你可以找出哪一個最高。或者添加應該工作。 –

-1

如果你想你可以使用:

SELECT * FROM `db` ORDER BY (3*`likesCount` + 2*`commentsCount`) DESC 

哪個重量會比3:2比例的評論更強,即強50%。我不確定你是想要這個還是願意選擇兩個數中較高的一個來排序,但是在確定兩個數的較高值之前要加權。如果後者是你在找什麼,那麼這應該做的伎倆:

SELECT * FROM `db` ORDER BY greatest(3*`likesCount`, 2*`commentsCount`) DESC 
+1

你不能這樣使用MAX。 –

+0

@Francois:對不起,你說得對。我的意思是最大。在回答之前,應該已經檢查過,這是一段時間... – sirlark

1

難道你不想要的總數的喜歡和評論?它們中的一個在受歡迎程度上比另一個重嗎?

你可能只是做:

SELECT *, (`likesCount` + `commentsCount`) as popularity FROM db ORDER BY popularity DESC ... 

由於mistercruffles以下建議,你可以事半功倍加有一個權衡的因素比其他更。只需將(likesCount + commentsCount)更改爲(X * likesCount + Y * commentsCount)其中X是喜歡的因子,Y用於評論。對於X = 2和Y = 1,這意味着喜歡比評論重要兩倍,但我相信你明白了這一點。

+2

你甚至可以添加一個乘數來加重一個或另一個 - 例如,如果你想有一個相當於兩個評論,你可以使用(2 *'likesCount'+'commentsCount')。如果你想深入一點,這裏有一個有趣的討論:http://blog.linkibol.com/2010/05/07/how-to-build-a-popularity-algorithm-you-can-自豪的/ – Elk

+0

這是一個非常好的觀點,我會加入。 – Claudiu