gpt4 book ai didi

mysql - 如何创建一个在 10 天后自动更新状态的事件?

转载 作者:行者123 更新时间:2023-11-30 21:46:02 26 4
gpt4 key购买 nike

我有 sent_date 和 proposal_status。假设 sent_date 是 23/03/2018 并且 proposal_status 是“Sent/Received”。

我想在 10 天后自动将状态更新为“中止”(即在 03/04/2018,状态应自动更改为中止)。

我尝试的是:

CREATE EVENT reset ON SCHEDULE EVERY 10 day DO update barter_proposals set proposal_status="Aborted" WHERE DATE_ADD( sent_date, INTERVAL 10 day ) AND proposal_status = "Sent/Received"

暂时出于测试目的,我用分钟代替天:

CREATE EVENT reset ON SCHEDULE EVERY 1 MINUTE DO update barter_proposals set proposal_status="Aborted" WHERE DATE_ADD( sent_date, INTERVAL 1 MINUTE ) AND proposal_status = "Sent/Received"

我得到的结果立即中止,而不是在 1 分钟后中止。它忽略了 Date_ADD。如何在10天后自动更新状态?

最佳答案

您的 UPDATE 查询中有此表达式。

WHERE DATE_ADD( sent_date, INTERVAL 10 day ) AND ...

你实际上想要与当前时间进行比较,就像这样。

WHERE DATE_ADD( sent_date, INTERVAL 10 day ) >= NOW() AND ...

MySQL 有一个怪癖,当数字单独出现在 WHERE 子句中时,它们会被强制转换为 bool 值。任何非零值都表示为真。这就是为什么 MySQL 没有提示您正在使用 DATETIME 表达式而不将它与任何东西进行比较。

专业提示 如果您采用格式化 SQL 的做法,这样您就不必四处滚动查看它,您会发现更容易进行故障排除。例如:

CREATE EVENT reset ON SCHEDULE EVERY 10 day DO 
update barter_proposals
set proposal_status="Aborted"
WHERE DATE_ADD( sent_date, INTERVAL 10 day ) >= NOW()
AND proposal_status = "Sent/Received"

注意。正如您定义的那样,此事件将每十天运行一次。因此,在此事件更改其状态之前,一些记录可能存在多达 20 天。

关于mysql - 如何创建一个在 10 天后自动更新状态的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49448803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com