2014-01-11 53 views
1

我想在24小时内检索浏览次数最多的页面,但尚未在页面(帖子)和查看次数之间创建1对1关系。SELECT在过去24小时内最多查看

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的关系,并存储每个文章与当时的页面请求观看时间的?

+0

非常好的一点,谢谢。 – iBrazilian2

+0

@MarkusMalkusch:那么你会推荐什么?每篇文章的记录都包含文章的外键和时间戳记? – Aquillo

回答

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; 
+0

我认为,似乎是实现这一目标的最有效方式,感谢您的帮助。 – iBrazilian2

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 

这将返回文章的所有访问与1人在过去24小时。

+0

@ssedano那仍然不显示24小时。如果您在0055查看并在0100清理,即使您在10分钟前查看,计数也会在0105处显示0个查看。 – Aquillo

+0

你说得对,我写得太快了。谢谢 – ssedano

相关问题