您如何根据访问量获得最受欢迎的商品?

Posted

技术标签:

【中文标题】您如何根据访问量获得最受欢迎的商品?【英文标题】:How do you get the most popular items based on visits? 【发布时间】:2011-11-29 06:25:30 【问题描述】:

假设我们有一个表格,其中包含如下所示的项目

item_id
item_visits

我们应该在此表中添加什么,以便能够根据过去 7 天的访问次数对这些项目进行排序。

我们如何查询到数据库?

【问题讨论】:

【参考方案1】:

对不起,我误解了这个问题... 好吧,当然你需要添加一个名为 VisitTime 的列,它的类型为 datetime。

之后,我建议创建一组视图来帮助您进行查询。例如一个名为 DailyVisit 的视图,其中包含每个项目的日视图量(以日期表示)。

【讨论】:

好吧,这个问题还问到还需要添加什么,所以如果需要,我愿意在表格中添加更多列。谢谢 我建议您(也许您已经知道)这种统计信息会占用大量数据库存储空间。 DailyVisits 存储什么? 没什么。正如我所说,这是一种观点。如果您不知道它是什么,我建议您阅读此en.wikipedia.org/wiki/View_(database)。视图在很多情况下都很有用。【参考方案2】:

你的桌子有点乱。

您不想跟踪项目访问次数。 您只想跟踪某个项目的访问时间以及访问者、访问地点和访问位置。

我建议如下:

table visit
------------
id integer not null primary key auto_increment
item_id integer not null foreign key fk_item_id
        references item(id) on delete cascade on update cascade
visitor_id integer not null foreign key fk_visitor_id
        references visitor(id) on delete cascade on update cascade
visit_date timestamp not null default current_timestamp
engine = InnoDB

这应该为您提供了解每个项目的访问量所需的所有详细信息,并获取有关项目和访问者的详细信息。

-- select total number of visits per item for the last week.
SELECT 
  COUNT(*) as NrOfVisits
  , i.name as ItemName
FROM visit v
INNER JOIN item i ON (v.item_id = i.id)
WHERE v.visit_date BETWEEN now() AND DATE_SUB(now(), INTERVAL 7 DAY)
GROUP BY v.item_id WITH ROLLUP

【讨论】:

以上是关于您如何根据访问量获得最受欢迎的商品?的主要内容,如果未能解决你的问题,请参考以下文章

最受欢迎Java数据库访问框架大比拼,你独爱哪一款?

如何找到最受欢迎和最不受欢迎的产品?

介绍NoSQL最受欢迎的产品

开源中国 2014 最受关注开源软件排行榜 TOP 50

Web 访问日志分析

世界上最受欢迎的在线课程 获得美国四个国家科学院院士的顶级课程 学会如何学习Learning How to Learn - Barbara Oakley