我正在尝试更新表中的DATETIME字段。我想要的是它在到期前总是有三个小时的时间。
我当前的代码是:
UPDATE mindcore_sessions
SET session_time = DATE_ADD(session_time, INTERVAL 3 HOUR)
WHERE session_id = '$sessionId';
示例值为:2013-02-11 00:00:00
。如果我运行此查询,它将变为:2013-02-11 03:00:00
。这是正确的但是,如果再次运行,它将变为2013-02-11 06:00:00
,依此类推。
我想要的是始终只提前三个小时。这很难解释,但我只希望它在再次运行时保持不变。如果1分钟后再次运行,我希望它只增加一分钟。
如果这个问题很冗长,我很抱歉,但我完全困惑了(而且已经晚了!)。
感谢:)
不要在最后一个session_time
上加三(3)小时,而是在NOW()
:上加三个小时
update mindcore_sessions
set session_time = DATE_ADD(NOW(), INTERVAL 3 HOUR)
where session_id = '$sessionId';`
将您的间隔添加到NOW()
,而不是添加到当前值:
UPDATE mindcore_sessions SET session_time = DATE_ADD(NOW(), INTERVAL 3 HOUR) WHERE session_id = '$sessionId';
在mysql中无法知道以前是否执行过相同的查询。
唯一可能的解决方案是将原始值保存在一个额外的列中,并使用该列检查该值是否在过去发生了更改。
如果您希望值从开始提前3小时,您可以简单地执行以下操作:
DATE_ADD(NOW(), INTERVAL 3 HOUR)