Я следующий запрос используется:Условного дублирование 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
. - False: Все поля должны быть личными.
Я не совсем уверен, как я бы это сделать, но, посмотрев вокруг, я попытался с помощью 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