我想在24小时内检索访问量最大的页面,但是我还没有在页面( most )和视图计数之间创建1到1的关系。
articles table
id | title | content | created | view_count
-----+-----------+---------+------------+------------
1 | title-1 | info-1 | 1386478352 | 2
2 | title-2 | info-2 | 1386532855 | 90
3 | title-3 | info-3 | 1386637325 | 25
4 | title-4 | info-4 | 1386812249 | 5
5 | title-5 | info-5 | 1387094028 | 10我使用以下内容来检索有史以来查看最多的内容,但我需要每24小时重新设置一次。
SELECT * FROM articles ORDER BY view_count DESC
我是否可以为此使用information_schema,而不是在文章和视图计数之间创建1到1的关系,并在每次页面被请求时存储文章?
发布于 2014-01-11 13:18:08
我建议不要使用基础DBS的任何实现细节。您将遇到迁移/更新的困难时期。
也就是说,我建议提供一个简单的1:n关系页面视图(articleId,viewdate)。每个用户视图都向Pageview中添加一个时间戳。然后,您可以很容易地加入,聚合和做任何您想要的信息。
SELECT articles.*, COUNT(*) views24h
FROM articles
LEFT JOIN pageview ON pageview.articleId = articles.Id
AND pageview.viewdate > SUBDATE(NOW(),1)
GROUP BY article.id
ORDER BY views24h DESC
LIMIT 10;发布于 2014-01-11 13:13:11
您应该更改您的数据库模型。
例如,创建一个名为date和article_id列的表。
然后为每个视图插入一个新行。比如:
INSERT INTO views (date, article_id) VALUES (UNIX_TIMESTAMP(),1)现在您可以进行这样的查询,这些查询在过去24小时内返回视图:
SELECT count(*) FROM views WHERE article_id = 1 AND date > UNIX_TIMESTAMP() - 86400这将在最后24小时内以1次返回文章的所有访问。
https://stackoverflow.com/questions/21062517
复制相似问题