首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择过去24小时内查看最多的

选择过去24小时内查看最多的
EN

Stack Overflow用户
提问于 2014-01-11 13:00:20
回答 2查看 275关注 0票数 1

我想在24小时内检索访问量最大的页面,但是我还没有在页面( most )和视图计数之间创建1到1的关系。

articles table

代码语言:javascript
复制
  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的关系,并在每次页面被请求时存储文章?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-11 13:18:08

我建议不要使用基础DBS的任何实现细节。您将遇到迁移/更新的困难时期。

也就是说,我建议提供一个简单的1:n关系页面视图(articleId,viewdate)。每个用户视图都向Pageview中添加一个时间戳。然后,您可以很容易地加入,聚合和做任何您想要的信息。

代码语言:javascript
复制
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;
票数 3
EN

Stack Overflow用户

发布于 2014-01-11 13:13:11

您应该更改您的数据库模型。

例如,创建一个名为datearticle_id列的表。

然后为每个视图插入一个新行。比如:

代码语言:javascript
复制
INSERT INTO views (date, article_id) VALUES (UNIX_TIMESTAMP(),1)

现在您可以进行这样的查询,这些查询在过去24小时内返回视图:

代码语言:javascript
复制
SELECT count(*) FROM views WHERE article_id = 1 AND date > UNIX_TIMESTAMP() - 86400

这将在最后24小时内以1次返回文章的所有访问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21062517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档