Условно ON DUPLICATE KEY UPDATE (Обновлять, только если определенное условие истинно)
У меня следующий запрос используется:
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
условно, поэтому он будет делать следующее:
lastupdate
было меньше 20 минут назад (lastupdate > NOW() - INTERVAL 20 MINUTE
).Правда: Обновитьlastupdate = NOW()
добавить один кprogramruncount
а затем обновитьip = :ip
.Ложь: Все поля должны быть одинаковыми.Я не совсем уверен, как бы я это сделал, но, посмотрев вокруг, я попытался использоватьIF
Заявление вON DUPLICATE KEY UPDATE
часть.
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