我有一个有很多记录(文章)的数据库,目前我通过计算视图来跟踪每条记录被查看的次数,因此我可以选择像“查看前5篇最受欢迎的文章”这样的内容。
这是通过一列整数完成的,每当检索到记录时,整数计数都会增加1。 这很好但是由于计数系统非常简单,我只能看到“所有时间”的视图。
我希望能有类似“看本周最受欢迎的5篇文章”。
我能想到的唯一方法是创建一个单独的表,在查看文章时使用文章Id和Date创建记录,然后在有限的时间段内创建SELECT语句。 这可能很容易,但同时表格会非常大。
有没有更好的方法来完成同样的事情?我已经在许多网站上看到了排序标准,但我不知道这是如何实现的。
有任何想法或意见吗?
提前致谢:)
答案 0 :(得分: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
为了防止表格过长,您可以定期删除旧记录。