2010-11-11 22 views
6

Lo he hecho con éxito con una instrucción UPDATE anterior pero no con un REPLACE.Incremente el valor del campo en REPLACE

Estoy guardando artículos favoritos en una tabla mysql cuando un usuario ha prestado.

Tabla Favs es:

USER (int) 
ITEM (int) 
COUNT (int default 0) 

El SQL que estoy tratando es:

REPLACE INTO favs (user,item,count) VALUES ('1','3', count + 1) 

aunque no lanza ningún error que no parece incrementar el valor tampoco.

¿Esto es posible? Gracias.

Respuesta

15

Parece que no funciona así al reemplazar. Desde el manual:

No se puede hacer referencia a los valores de la fila actual y utilizarlos en la nueva fila . Si utiliza una asignación tal como SET col_name = col_name + 1, la referencia al nombre de la columna en el lado mano derecha se trata como DEFAULT (col_name), así que la asignación es equivalente a SET col_name = DEFAULT (col_name) + 1.

Editar:

sin embargo, INSERT ... ACTUALIZACIÓN eN DUPLICADO podría hacer lo que estamos tratando de lograr:

INSERT INTO favs (user, item) VALUES (2, 3) 
    ON DUPLICATE KEY UPDATE count = count + 1; 
+0

acuerdo N w orries haré una declaración de ACTUALIZACIÓN separada inmediatamente después. Gracias. – Titan

+0

Por favor, vea mi edición - ¿Esto es lo que está tratando de hacer? De ser así, sería más seguro y más eficiente que las declaraciones separadas de reemplazo y actualización. – Thilo

+1

que funciona de maravilla gracias, excepto que necesita eliminar 'SET' de la declaración para que funcione. – Titan

Cuestiones relacionadas