8
我已经使用下面的查询:条件对重复密钥更新(更新仅在特定条件为真)
INSERT INTO userlist (username, lastupdate, programruncount, ip)
VALUES (:username, NOW(), 1, :ip)
ON DUPLICATE KEY UPDATE
lastupdate = NOW(), programruncount = programruncount + 1, ip = :ip;
不过,我也希望让ON DUPLICATE KEY UPDATE
有条件的,所以它会做到以下几点:
- IF
lastupdate
小于20分钟前(lastupdate > NOW() - INTERVAL 20 MINUTE
)。 - True:更新
lastupdate = NOW()
,加一个到programruncount
,然后更新ip = :ip
。 - 错误:所有字段应保持不变。
我不太确定我会怎样做,但环顾四周后,我试着在ON DUPLICATE KEY UPDATE
部分使用IF
声明。
INSERT INTO userlist (username, lastupdate, programruncount, ip)
VALUES ("testuser", NOW(), "1", "127.0.0.1")
ON DUPLICATE KEY UPDATE
IF(lastupdate > NOW() - INTERVAL 20 MINUTE, VALUES(lastupdate, programruncount + 1),
lastupdate, programruncount);
但是我收到以下错误:#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF(lastupdate > NOW() - INTERVAL 20 MINUTE, VALUES(lastupdate, programruncount +' at line 6