0

我正在尝试更新表中的 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 分钟后再次运行,我希望它只增加一分钟。

对不起,如果问题很冗长,但我完全糊涂了(而且已经很晚了!)。

谢谢 :)

4

3 回答 3

3

不是将三 (3) 小时添加到最后一个session_time,而是将三 (3) 小时添加到NOW()

update mindcore_sessions
set session_time = DATE_ADD(NOW(), INTERVAL 3 HOUR)
where session_id = '$sessionId';`
于 2013-02-11T21:17:49.050 回答
2

将您的时间间隔添加到NOW()而不是添加到当前值:

UPDATE mindcore_sessions SET session_time = DATE_ADD(NOW(), INTERVAL 3 HOUR) WHERE session_id = '$sessionId';
于 2013-02-11T21:17:51.173 回答
1

mysql 无法知道之前是否执行过相同的查询。

唯一可能的解决方案是将原始值保存在一个额外的列中,并使用该列检查该值是否在过去发生了更改。

如果您希望该值在 3 小时后提前,您可以简单地执行以下操作

DATE_ADD(NOW(), INTERVAL 3 HOUR)

于 2013-02-11T21:18:11.320 回答