Ho la seguente domanda in uso:condizionato DUPLICATE KEY UPDATE (aggiornamento solo se certa condizione è vera)
INSERT INTO userlist (username, lastupdate, programruncount, ip)
VALUES (:username, NOW(), 1, :ip)
ON DUPLICATE KEY UPDATE
lastupdate = NOW(), programruncount = programruncount + 1, ip = :ip;
Tuttavia, ho anche voglia di fare il ON DUPLICATE KEY UPDATE
condizionale, in modo che farà il seguente:
- SE
lastupdate
era meno di 20 minuti fa (lastupdate > NOW() - INTERVAL 20 MINUTE
). - Vero: Aggiornamento
lastupdate = NOW()
, aggiungere uno aprogramruncount
e quindi aggiornareip = :ip
. - Falso: Tutti i campi devono essere lasciati gli stessi.
io non sono davvero sicuro di come avrei fatto questo, ma dopo aver guardato intorno, ho provato con un IF
Dichiarazione a parte 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);
Comunque sto ottenendo il seguente errore: #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