Bedingung ON DUPLICATE KEY UPDATE (Aktualisierung nur, wenn bestimmte Bedingung erfüllt ist)

Ich habe die folgende Abfrage verwendet:

INSERT INTO userlist (username, lastupdate, programruncount, ip)
VALUES (:username, NOW(), 1, :ip)
ON DUPLICATE KEY UPDATE
lastupdate = NOW(), programruncount = programruncount + 1, ip = :ip;

Ich möchte aber auch das machenON DUPLICATE KEY UPDATE bedingt, so wird es das Folgende tun:

OB lastupdate war vor weniger als 20 Minuten (lastupdate > NOW() - INTERVAL 20 MINUTE).Wahr: Aktualisierenlastupdate = NOW(), addiere eins zuprogramruncount und dann aktualisierenip = :ip.Falsch: Alle Felder sollten gleich bleiben.

Ich bin mir nicht sicher, wie ich das machen soll, aber nachdem ich mich umgesehen hatte, versuchte ich es mit einemIF Aussage in derON DUPLICATE KEY UPDATE Teil.

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);

Ich erhalte jedoch den folgenden Fehler:#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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage