0

我有一个包含很多(文章)记录的数据库,目前我通过计算查看次数来跟踪每条记录的查看次数,这样我就可以对诸如“查看前 5 名查看次数最多的文章”之类的内容进行排序

这是通过一列整数完成的,每当检索到记录时,整数计数就会增加 1。这很好,但由于计数系统非常简单,我只能看到“所有时间”的视图。

我想要“查看本周浏览量最高的 5 篇文章”之类的内容。

我能想到的唯一方法是有一个单独的表,在查看文章时使用文章 ID 和日期进行记录,然后在有限的时间段内进行 SELECT 语句。这很容易奏效,但同时桌子很快就会变得非常大。

有没有更好的方法来完成同样的事情?我在很多网站上看到过排序标准,但我不知道这是如何实现的。

有什么想法或意见吗?

提前致谢 :)

4

1 回答 1

1

每篇文章的每个视图都不是一行,而是每天一行。查看文章时,您将执行以下操作:

INSERT INTO article_views (article_id, date, views)
VALUES (@article, CURRENT_DATE(), 1)
ON DUPLICATE KEY UPDATE views = views + 1;

然后获取过去一周浏览量排名前 5 的文章:

SELECT article_id, SUM(views) total_views
FROM article_views
WHERE date > NOW() - INTERVAL 7 day
GROUP BY article_id
ORDER BY total_views DESC
LIMIT 5

为了防止表变得太大,您可以定期删除旧记录。

于 2013-10-05T12:14:54.363 回答