在我的博客上,我在右侧导航中显示了10页最受欢迎的文章.这是我如何得到的:
SELECT * FROM entries WHERE is_published = 1 ORDER BY hits DESC, created DESC LIMIT 10
我想做的是在每天页面点击次数方面显示前10名.我正在使用MySQL.有没有办法可以在数据库中执行此操作?
顺便说一句,该created
字段是日期时间.
更新:我想我没有说清楚.我想要的是1000天前发布的10,000次点击的博客文章,与1天前发布的10次点击的博客帖子具有相同的受欢迎程度.在伪代码中:
ORDER BY hits / days since posting
...其中hits
只是一个在每次查看博客文章时递增的int.
好的,这就是我将要使用的内容:
SELECT *, AVG( hits / DATEDIFF(NOW(), created) ) AS avg_hits FROM entries WHERE is_published = 1 GROUP BY id ORDER BY avg_hits DESC, hits DESC, created DESC LIMIT 10
谢谢,斯蒂芬!(我喜欢这个网站...)
我不完全确定您可以使用您在查询中建议的表结构.我能想到的唯一方法是通过每天最高的平均点击次数获得前10名.通过这样做,您的查询变为:
SELECT *, AVG(hits / DATEDIFF(NOW(), created)) as avg_hits FROM entries WHERE is_published = 1 GROUP BY id ORDER BY avg_hits DESC LIMIT 10
此查询假定您创建的字段是DATETIME(或类似)数据类型.