Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 按天/周/月筛选常用项目_Php_Mysql_Filtering - Fatal编程技术网

Php 按天/周/月筛选常用项目

Php 按天/周/月筛选常用项目,php,mysql,filtering,Php,Mysql,Filtering,我正在开发一个网站,将有20万页。还有一个浏览部分,显示最受欢迎、评分最高的文档等。然而,这一部分将在发布后的几周内几乎静止不动。因此,我还想实现一个过滤系统,它将显示今天、本周、本月最受欢迎的项目,就像youtube一样 就这样, 我应该如何实现这个功能?我是否需要另一个表,每天每个文档都有一个新条目 文档ID、日期、视图计数、评级 所以我将使用一天获取今天的行进行过滤,或者使用一周计算一周(7行)进行过滤?这似乎效率不高。你有什么建议吗 顺便说一下,我用的是灯堆 谢谢,我想我应该在代码中计

我正在开发一个网站,将有20万页。还有一个浏览部分,显示最受欢迎、评分最高的文档等。然而,这一部分将在发布后的几周内几乎静止不动。因此,我还想实现一个过滤系统,它将显示今天、本周、本月最受欢迎的项目,就像youtube一样

就这样,

我应该如何实现这个功能?我是否需要另一个表,每天每个文档都有一个新条目

文档ID、日期、视图计数、评级

所以我将使用一天获取今天的行进行过滤,或者使用一周计算一周(7行)进行过滤?这似乎效率不高。你有什么建议吗

顺便说一下,我用的是灯堆


谢谢,

我想我应该在代码中计算日期,然后将它们作为参数传递给您正在使用的SQL。

假设您给表中的记录加上时间戳,您应该能够放入where子句,将时间戳限制在您想要的任何时间范围内

您可以将结果(尤其是较长的结果)缓存足够长的时间,使请求变得无关紧要

编辑

但也许你指的是今天最受欢迎的,而不是今天增加的最受欢迎的


在这种情况下,我没有答案。

最直接的方法是每次在
最近的视图(什么,什么时候)中显示资源时保存时间戳和资源id
。可以使用适当的WHERE子句创建日/周/月图表,如
WHERE-when>$beginOfPeriod和when<$endOfPeriod


出于性能原因,您可以每晚聚合这些值,将总和保存在单独的表中,如
每日视图(what,sum)
,并截断源表。

我会使用编译器来完成。考虑到流量和响应时间,Youtube可能也会这样做

这个原理很容易理解。您可以在
页面视图
表中记录每个视图或评级。您可以定义编译发生的时间段(每小时、每天、每周、每月)。每次你到达好时机(例如:一天结束时),你都会执行编译器,它实际上是执行一个查询

SELECT * FROM page_view WHERE date > $from_date AND date < $to_date
从页面视图中选择*其中日期>$FROM\u日期和日期<$to\u日期
。。。并存储结果。这可能在cron作业中效果更好


下次需要显示信息时,只需获取存储的结果并显示它,而无需重新计算。您可以使用多种存储方法:MySQL表(例如:
page\u view\u compiled
)、memcached等。

如果您不希望单个用户每秒生成1000个视图,请记住安全问题。祝你好运,实现了一种阻止坚定攻击者的方法。。