2014-01-08 46 views
1

我試圖找到一種在我的網上商店中顯示熱門搜索的好方法。在數據庫中查找熱門搜索

我usersearches的表有兩列,搜索內容和時間戳(搜索時間),像這樣:

searchword timestamp 
--------------------------------- 
bin laden  2011-12-01 11:00:00 
pokemon  2013-08-01 12:00:00 
doge   2014-08-01 10:00:00 

做的好方法是隻排序計數(搜索內容)。 如果一個搜索詞在2011年非常流行,並且在2011年搜索了一百萬次,而2014年沒有搜索詞,那麼如果使用該方法,它現在仍然會流行。所以這是一個壞方法。

它需要以某種方式考慮時間戳,也許這樣可以使過去幾個月的搜索比以前的搜索具有更多的權重。

任何人有一個建議如何解決這個問題?

我知道沒有明確的答案,即時只是尋找好的方法來解決它。

+0

也許與之間的SQL查詢到「組」例如過去的最多10搜查至6個月的項目。 – Goikiu

回答

1

您應該計算一次搜索詞的使用次數。

這將使您的查詢是這樣的:

SELECT searchword, count(*) AS totalsearch FROM table WHERE timestamp > '2013-01-01 00:00:00' AND timestamp < '2013-12-31 00:00:00' GROUP BY searchword ORDER BY totalsearch DES; 

或利用之間:

SELECT searchword, count(*) AS totalsearch FROM table WHERE timestamp BETWEEN '2013-01-01 00:00:00' AND '2013-12-31 00:00:00' GROUP BY searchword ORDER BY totalsearch DES; 
+0

解決方案非常簡單。謝謝:P –

1

我會創造我自己的人氣指數在不同的日期間隔...

例如

select 
    searchword, 
    sum(
    case 
    when searchdate < date_sub(now(), interval 3 year) then 1 
    when searchdate < date_sub(now(), interval 2 year) then 5 
    when searchdate < date_sub(now(), interval 1 year) then 10 
    when searchdate < date_sub(now(), interval 6 month) then 20 
    when searchdate < date_sub(now(), interval 3 month) then 100 
    when searchdate < date_sub(now(), interval 1 month) then 500 
    else 1000 
    end) as points 
from searches 
group by searchword 
order by points desc 
; 

詳情http://sqlfiddle.com/#!2/70d6f/2

+0

哇,現在我學到了新的東西。謝謝 –