Mam następujące kwerendy używany:Warunkowe ON duplikat KEY UPDATE (Aktualizacja tylko wtedy, gdy pewien warunek jest spełniony)
INSERT INTO userlist (username, lastupdate, programruncount, ip)
VALUES (:username, NOW(), 1, :ip)
ON DUPLICATE KEY UPDATE
lastupdate = NOW(), programruncount = programruncount + 1, ip = :ip;
Jednak również chcę, aby ON DUPLICATE KEY UPDATE
warunkowy, więc będzie wykonać następujące czynności:
- IF
lastupdate
była mniejsza niż 20 godziny temu (lastupdate > NOW() - INTERVAL 20 MINUTE
). - True: Zaktualizuj , dodaj jedną do
programruncount
, a następnie zaktualizujip = :ip
. - Fałsz: Wszystkie pola należy pozostawić takie same.
nie jestem pewien, w jaki sposób mogę to zrobić, ale po patrząc dookoła, próbowałem za pomocą instrukcji IF
w ON DUPLICATE KEY UPDATE
części.
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);
Jednak ja otrzymuję następujący błąd: #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