2009-05-15 13 views
7

Se ho una query come questa, come posso riferirmi ai valori che ho già dato nella dichiarazione di aggiornamento, così che non ho bisogno di inserire gli stessi dati per eseguire nuovamente la query? Esempio Vorrei aggiornare il valore col1 con 'xxx', ma ora ho bisogno di inserire 'xxx' di nuovo in una dichiarazione duplicata. Esiste comunque un riferimento a questi valori in una dichiarazione duplicata?MySQL sull'aggiornamento della chiave duplicata

INSERT INTO TABLENAME(col1, col2) 
VALUES (’xxx’, ‘yyy’) 
ON DUPLICATE KEY UPDATE col1 = ‘zzz’ 
+0

Ho appena lasciare questo qui, molto bella soluzione: http://stackoverflow.com/a/450695/1101589 – Ekonoval

risposta

33

Questo dovrebbe funzionare ed è un po 'più elegante:

INSERT INTO TABLENAME(col1, col2) 
VALUES (’xxx’, ‘yyy’) 
ON DUPLICATE KEY UPDATE col1 = VALUES(col1) 

Si noti che non è necessario per aggiornare la parte chiave primaria della riga. Sappiamo che è lo stesso perché c'è stata una collisione.

+0

che i valori di parole chiave in l'ultima riga è cruciale! – physicalattraction

3

In PHP faccio questo per risolvere il problema:

$fields = "a = 1, b = 2, c = 3"; 
$sql = "INSERT INTO some_table SET id = $id, $fields ON DUPLICATE KEY UPDATE $fields"; 
mysql_query($sql); 
Problemi correlati