我試圖讓有以下行爲的查詢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! –