我正在尝试进行具有以下行为的查询:
- 如果尚不存在则插入新行
:id = NULL
或行。id = :id
id = :id
如果行已存在,则更新现有行。- 将值设置
activated
为NOW()
if:- 的当前值
status <> :status
。(又名。如果 的值status
会改变) - 的值
:status = 'active'
。status
(又名will的新值'active'
)
- 的当前值
为了做到这一点,我做了以下准备好的声明:
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'
。
谁能解释我做错了什么?并且(最好)解释如何解决它?