mysql - into - on duplicate key update php
INSERT INTO.. ON DUPLICATE KEY UPDATE para varios elementos (2)
Quiero hacer algo como esto
INSERT INTO t (t.a, t.b, t.c)
VALUES (''key1'',''key2'',''value'')
ON DUPLICATE KEY UPDATE
t.c = ''value'';
INSERT INTO t (t.a, t.b, t.c)
VALUES (''key1'',''key3'',''value2'')
ON DUPLICATE KEY UPDATE
t.c = ''value2'';
ta y tb son claves. Todo esto funciona bien pero recibo un error en el segundo inserto. Con phpMyAdmin, una consulta como esta funciona bien, pero supongo que está ejecutando las consultas de forma independiente, ya que imprime los resultados de esa consulta como comentarios.
Algo así también sería bueno, pero necesitaré tener diferentes valores para cada artículo. Prefiero esto, pero no estoy seguro de cómo puedo cambiar el valor de la actualización para cada valor.
INSERT INTO t (t.a, t.b, t.c)
VALUES (''key1'',''key2'',''value''), (''key1'',''key3'',''value2'')
ON DUPLICATE KEY UPDATE
t.c = ???
El problema está en los signos de interrogación, ¿qué debería poner allí para que cada inserción / actualización tenga el valor correcto? Obviamente, si pongo un valor, todos los campos obtendrán ese valor.
Si hay otra forma de hacer una "actualización si existe, de lo contrario inserte" consulta en múltiples campos con dos claves, también estoy preparado para otras ideas. Supongo que podría ejecutar cada consulta por separado (como phpMyAdmin?) Pero va a haber muchas consultas, así que realmente quiero evitar eso.
Use la función VALUES ()
INSERT INTO t (t.a, t.b, t.c)
VALUES (''key1'',''key2'',''value''), (''key1'',''key3'',''value2'')
ON DUPLICATE KEY UPDATE
t.c = VALUES(t.c)
ver http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
Demasiado bajo en la reputación para hacer comentarios, pero quería agregar una sintaxis un poco más compleja inspirada en la respuesta @ ʞɔıu. Para actualizar varios campos en clave duplicada:
INSERT INTO t (t.a, t.b, t.c, t.d)
VALUES (''key1'',''key2'',''value'',''valueb''), (''key1'',''key3'',''value2'',''value2b'')
ON DUPLICATE KEY UPDATE
t.c = VALUES(t.c),
t.d = VALUES(t.d)
Espero que ayude a alguien por ahí a buscar realizar una inserción masiva con múltiples actualizaciones duplicadas. La sintaxis se me escapó.