2016-11-09 26 views
1

我有一張有數千條新聞報道的表格。在網站上,有一個新聞列表頁面,可以通過無限滾動按受歡迎度對文章進行排序。表看起來是這樣的:如何按人氣排序文章?

id | title | description | views | createdAt 

確定受歡迎程度的關鍵列是views和createdAt。

什麼算法/公式可以實現按受歡迎程度排序文章?

目前,我只是按降序對視圖進行排序,但這樣,列表幾乎不會更新,並且始終顯示相同的文章。

+0

我認爲這是SO的主題。也許超級用戶會更合適? – Strawberry

+0

有多種選擇:1st - 添加http://tablesorter.com/docs/ os類似的東西,並在前端排序表。第2步 - 將「查詢」參數添加到標題中,例如「?createdAt = desc」鏈接,讀取該參數並將其添加到您的SQL調用中,如@WaleedAhmed所述 – Peon

回答

3

一種方法可能是「懲罰」他們的年齡的文章。例如,自文章發佈以來的每一天,將評分降低100(或其他與您的網站流量相匹配的任意數字)。這樣,舊的物品會慢慢被推出和新的會去觀看的機會:

SELECT * 
FROM  articles 
ORDER BY views - 100 * DATEDIFF(CURRENT_DATE, createdAt) DESC 
+0

我喜歡這個想法,可以在我的項目中使用它。 – Ergec

+0

爲什麼不按'createdAt = desc'排序? – Peon

+0

@DainisAbols而不是'view's?作爲二級分選柱? – Mureinik

0

簡單做它,希望它會工作:

order by views,createdAt 
0

你可以有一個更列說'lastView'

想法是打印最新的熱門項目不只是流行。

在您的查詢中,您可以給出條件: select * from where where created> ='recentDate1'and lastView> ='recentDate2'order by view desc;根據你的需要。

在每一次刷新,你可以通過jQuery來改變最近的日期,這將給你有限數量的結果。你甚至可以減少無限循環/結果。