在数据库中查找热门搜索

时间:2014-01-08 11:37:23

标签: mysql sorting

我正试图找到一种在我的网上商店中显示热门搜索的好方法。

我的用户搜索表有两列,搜索词和时间戳(搜索时间),如下所示:

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年没有搜索,那么如果使用这种方法,它现在仍然会流行起来。这是一个糟糕的方式。

它需要以某种方式考虑时间戳,也许这样可以使过去几个月的搜索比旧搜索更重要。

任何人都有建议如何解决这个问题?

我知道没有明确的答案,我只是想找到解决问题的好方法。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

我会为不同的日期间隔创建自己的受欢迎度指数...

E.g。

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