2

我正在尝试找到一种方法来让 cronjob 检查自上次更新一行以来已经过去了多长时间,如果它超过 X,则将字段“ACTIVE”更改为“FALSE”。

我有一个更新其当前 IP 并添加时间戳的机器人。

另一方面,可能有一个用户愿意向机器人发送命令。我的想法是能够判断机器人在最后 X 秒内是否处于活动状态,因此尝试向它发送命令是有意义的。

所以,我猜某种脚本会检查 current_time() - field_time >= X then changeValue('ACTIVE')<- False。

这可以每隔 X 秒直接在数据库上完成吗?或者也许在 PHP 中使用脚本是处理这个问题的更好方法?(无限循环的脚本)

4

1 回答 1

1

尝试使用 MySQL调度执行此操作:

  DELIMITER $$
  CREATE EVENT deactivation
    ON SCHEDULE EVERY 10 MINUTE STARTS CURRENT_TIMESTAMP
    DO
      BEGIN
        UPDATE tbl SET tbl.active = FALSE
           WHERE tbl.active = TRUE AND 
           ( TIME_TO_SEC( TIMEDIFF (NOW(),tbl.updated) ) / 60 ) > 10;
      END;
  $$;

您的时间戳在哪里tbl.updated(使用 php 生成)。由于我的测试箱无法访问 atm,我不确定此查询是否正确,但通常它应该可以完成这项工作。

于 2013-10-20T12:17:46.797 回答