我正试图找到一种在我的网上商店中显示热门搜索的好方法。
我的用户搜索表有两列,搜索词和时间戳(搜索时间),如下所示:
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 :(得分: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
;