我正在创建一个 todo 应用。我有一个接收1, 2 or 3 (pending, overdue, completed)
的状态列。
每当我创建任务时,它都会设置为pending
。用户可以将其标记为完成。但有没有办法自动将其更新为overdue
,以防它未完成且due_date
小于今天?
答案 0 :(得分:2)
您可以使用MySQL
事件计划程序。
<强>先决条件:强>
你的mysql服务器必须有event_scheduler
ON
。
检查事件调度程序是ON
还是OFF
SELECT @@event_scheduler;
要转动event_scheduler ON
,请运行以下查询:
SET GLOBAL event_scheduler = ON;
注意:如果重新启动MYSQL Server
,则将重置事件调度程序状态,除非在配置文件中写入以下内容。
对于Windows: my.ini 文件中的,请在[mysqld]
部分
[mysqld]
event_scheduler=on
对于Linux: my.cnf 文件
[mysqld]
event_scheduler=on
<强>事件:强>
CREATE
EVENT `updateStatusEvent`
ON SCHEDULE EVERY 1 DAY STARTS '2016-08-11 00:00:00'
ON COMPLETION NOT PRESERVE
ENABLE
DO
UPDATE your_table SET status_column = 2 WHERE your_time_column < CURDATE();
该活动将首次在'2016-08-11 00:00:00'
开始
之后,将每隔1天安排一次事件,并更新相应数据的状态。
答案 1 :(得分:1)
如果您的MySQL版本支持它(版本&gt; = 5.1.6,如果我没有弄错的话),您可以使用Event Scheduler。
CREATE EVENT check_overdue ON SCHEDULE EVERY 2 HOUR DO
UPDATE mytable SET status = 2 WHERE due_date < NOW();
另一种选择是设置一个调用PHP或其他在线脚本的Cron作业。
无论如何,您必须定期查询任何逾期事件并将其标记为逾期。