Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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 计算本周的mysql值,然后从周一开始重新开始计算?_Php_Mysql - Fatal编程技术网

Php 计算本周的mysql值,然后从周一开始重新开始计算?

Php 计算本周的mysql值,然后从周一开始重新开始计算?,php,mysql,Php,Mysql,我有一个计数查询,它统计一个用户查看另一个用户配置文件的次数。 它目前只计算表中的所有行,但是我想知道php中是否有一种方法可以使用计算,即从周一到周日计算表“ptb_profile_views”中的所有行,然后在下周一再次从0开始,计算该周的所有值,不包括前一周的任何计数,我不确定这是不是可能的想法,因为它需要一些时间的记忆方面 我想知道的另一个选择是,是否有一个mysql语句,我可以添加到每个星期天的00:00AM,从ptb_profile_视图中删除所有内容,然后我们周一重新开始 有人能帮

我有一个计数查询,它统计一个用户查看另一个用户配置文件的次数。 它目前只计算表中的所有行,但是我想知道php中是否有一种方法可以使用计算,即从周一到周日计算表“ptb_profile_views”中的所有行,然后在下周一再次从0开始,计算该周的所有值,不包括前一周的任何计数,我不确定这是不是可能的想法,因为它需要一些时间的记忆方面


我想知道的另一个选择是,是否有一个mysql语句,我可以添加到每个星期天的00:00AM,从ptb_profile_视图中删除所有内容,然后我们周一重新开始

有人能帮我解决吗,谢谢

我的桌子看起来像:

id   |   profile_id   |   viewed_id

1           4                 8
2           5                 6
mysql

php


您可以按星期几、一年中的星期进行筛选,例如

SELECT count(*), YEAR(datefield), WEEK_OF_YEAR(datefield)
FROM yourtable
GROUP BY YEAR(datefield), WEEK_OF_YEAR(datefield)
删除逻辑将类似。删除本年度中比“本周”早一周的所有记录,然后还删除以前年份中的所有记录:

DELETE FROM yourtable
WHERE (YEAR(datefield) < YEAR(now()))
   OR (YEAR(datefield) = YEAR(now()) AND (WEEK_OF_YEAR(datefield) < WEEK_OF_YEAR(now()))
从表中删除
其中(年(日期字段)
由于您提到,您不会在每次有人访问个人资料时记录日期时间,而只是计数,因此唯一的解决方案是在每周一00:00重置计数器

您可以使用cron作业来完成此操作。您应该能够从主机管理面板创建一个

或者,您也可以每周一手动运行cron页面来重置计数器

如果您想让事情变得更复杂,可以让cron页面创建/更新一个日志文件,保存总访问量


不过,最好的解决方案是重新考虑数据库设计,创建一个表,用正确的日期时间很好地记录每次访问。

您可以通过在
ptb_profile_视图
表中添加一个日期/日期时间列来解决此问题。然后您可以按日期选择它们。“每个星期天早上00:00删除ptb_profile_视图中的所有内容,然后我们在星期一重新开始”。您可以制定一个执行此操作的计划流程(适用于Windows的研究
schtasks
)但是您可能应该在删除之前插入到日志表中,以便进行适当的测量。此外,您的SQL似乎缺少一些空格,这些空格可能会导致执行错误(
…DISTINCT profile\u id)totalCOUNT FROM…
SELECT count(*), YEAR(datefield), WEEK_OF_YEAR(datefield)
FROM yourtable
GROUP BY YEAR(datefield), WEEK_OF_YEAR(datefield)
DELETE FROM yourtable
WHERE (YEAR(datefield) < YEAR(now()))
   OR (YEAR(datefield) = YEAR(now()) AND (WEEK_OF_YEAR(datefield) < WEEK_OF_YEAR(now()))