Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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
用于更新用户统计数据的Mysql PHP Cron_Php_Mysql_Cron - Fatal编程技术网

用于更新用户统计数据的Mysql PHP Cron

用于更新用户统计数据的Mysql PHP Cron,php,mysql,cron,Php,Mysql,Cron,我正在尝试构建一个php cron作业,它将每24小时运行一次,并在mysql数据库中更新用户静态信息。我遇到的问题是,我不确定如何确保相同的用户值不会在循环中更新,这意味着其他用户值都不会更新。我试图用一个while循环来完成它,但是效果不太好 所以基本上它应该是这样工作的 1.cron启动-> 2.更新mysql数据库中的每个用户统计信息-> 3.cron结束MySQL解决方案: 您需要MySQLevent以时间为基础运行 我建议您根据您的情况编写update语句,并将相同的过程链接到您希望

我正在尝试构建一个php cron作业,它将每24小时运行一次,并在mysql数据库中更新用户静态信息。我遇到的问题是,我不确定如何确保相同的用户值不会在循环中更新,这意味着其他用户值都不会更新。我试图用一个while循环来完成它,但是效果不太好

所以基本上它应该是这样工作的
1.cron启动->
2.更新mysql数据库中的每个用户统计信息->

3.cron结束

MySQL解决方案:

您需要MySQL
event
以时间为基础运行

我建议您根据您的情况编写
update
语句,并将相同的过程链接到您希望在每天开始时运行的事件计划程序

您可以按以下方式执行:

示例

delimiter //
drop event if exists event_scheduling_sample;

create event if not exists event_scheduling_sample
--  on schedule every 86400 second starts 00:00:00
--  at timestamp( adddate( current_date, 1 ),'00:00:00' )
--  on schedule every 1 day 
    --   starts current_timestamp 
    --   ends current_timestamp + interval '5' day
--  on schedule every 1 day 
    --   starts current_timestamp 
    --   ends timestamp( current_date,'23:59:59' )

  on schedule every 1 day 
     starts timestamp( current_date + 1, '00:00:00' )

  comment 'event scheduling sample'
  do
    call db_name.procedure_name_that_updates_the_user_records();
;
//
delimiter ;
请参阅

事件计划程序的默认状态已禁用。
您需要通过以下任何语句来启用它

SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;
当事件调度器打开时,事件调度器线程作为守护进程列在
SHOW PROCESSLIST
的输出中,其状态如下所示:

mysql> SHOW PROCESSLIST\G
*************************** 1. row ***************************
     Id: 1
   User: root
   Host: localhost
     db: NULL
Command: Query
   Time: 0
  State: NULL
   Info: show processlist
*************************** 2. row ***************************
     Id: 2
   User: event_scheduler
   Host: localhost
     db: NULL
Command: Daemon
   Time: 3
  State: Waiting for next activation
   Info: NULL
2 rows in set (0.00 sec)
一旦事件调度程序设置为ON,您将看到它正在工作


请参阅

您的数据库中需要一个标志,如上次更新的
。当你更新某人的统计数据时设置它,然后在你的查询中使用
WHERE last_updated
子句。谢谢,我会试试的now@Ravinder谢谢:)我要用这个