我试图让有以下行为的查询MySQL的问题:与IF语句和TIMESTAMP
- 如果插入新行
:id = NULL
或行,其中id = :id
还不存在。 - 更新现有的行,如果其中
id = :id
已存在的行。 - 设置的
activated
到NOW()
如果值:中status <> :status
- 当前值。 (aka。如果
status
的值将被改变) - 值为
:status = 'active'
。 (又名的status
新值将是'active'
)
- 当前值。 (aka。如果
为了做到这一点,我已经做了以下准备好的声明:
INSERT INTO test
(`id`, `title`, `status`, `activated`)
VALUES
(:id, :title, :status, NULL)
ON DUPLICATE KEY UPDATE
id = LAST_INSERT_ID(id),
status = VALUES(status),
activated = IF(status <> VALUES(status) AND VALUES(status) = 'active',
NOW(), activated);
据我所看到的,这声明准确地描述了所需的逻辑。但是,activated
的值始终保持不变,无论status
的值是否更改为'active'
。
任何人都可以解释我做错了什么?并(最好)解释如何解决它?
嘿,我没有想到!我现在要试试:) –
好的!有用!感谢Joachim! –