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

时间:2014-01-11 13:00:20

标签: mysql

我想要检索24小时内查看次数最多的页面,但我没有在页面(帖子)和视图计数之间建立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关系,并在每次查看文章时存储页面请求的时间?

2 个答案:

答案 0 :(得分:2)

我建议不要使用底层DBS的任何实现细节。您将很难进行迁移/更新。

那说我建议一个简单的1:n关系Pageview(articleId,viewdate)。每个用户视图都会在页面视图中添加时间戳。然后,您可以轻松地加入,聚合并根据需要执行任何操作。

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;

答案 1 :(得分:1)

您应该更改数据库模型。

例如,创建一个以datearticle_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。