Aquí hay una solución a “Multi update mysql” sin romperse mucho la cabeza y sin programar.
Imaginemos que tenemos una tabla ‘grabaciones’ que tiene los campos ‘fecha_grabacion’ y ‘fecha_creacion’ y queremos hacer un update por cada grabacion de forma que la fecha de grabación pase a ser la fecha de creación.
Es hacer por cada fila:
update grabaciones set fecha_grabacion=’fecha de creacion de la grabacion id 1835’’ where grabacion_id=1835;
En esta imagen vemos en la pestaña “grabaciones” sus contenidos.
Hacemos una query que con ‘CONCAT’ creemos el ‘UPDATE’ a partir de la query de las filas que queremos modificar:
select concat(‘update grabaciones set fecha_grabacion=\»,fecha_creacion,’\’ where grabacion_id=’,grabacion_id) from grabaciones where fecha_grabacion = ‘0000-00-00 00:00:00’;
Eso nos devuelve una única columna con updates. Como se muestra en la figura.
La exportamos como texto, y ya tenemos nuestros comandos updates para aplicarlos.
update grabaciones set fecha_grabacion=’2012-10-08 09:55:44′ where grabacion_id=1775;
update grabaciones set fecha_grabacion=’2012-10-08 09:55:48′ where grabacion_id=1831;
update grabaciones set fecha_grabacion=’2012-10-08 09:55:48′ where grabacion_id=1835;
update grabaciones set fecha_grabacion=’2012-10-08 09:56:17′ where grabacion_id=2228;
update grabaciones set fecha_grabacion=’2012-10-08 09:56:43′ where grabacion_id=2573;
update grabaciones set fecha_grabacion=’2012-10-08 09:56:52′ where grabacion_id=2693;
update grabaciones set fecha_grabacion=’2012-10-08 09:57:00′ where grabacion_id=2806;
update grabaciones set fecha_grabacion=’2012-10-08 09:57:14′ where grabacion_id=3000;
update grabaciones set fecha_grabacion=’2012-10-08 09:57:20′ where grabacion_id=3081;
update grabaciones set fecha_grabacion=’2012-10-08 09:57:25′ where grabacion_id=3149;
update grabaciones set fecha_grabacion=’2012-10-10 19:30:46′ where grabacion_id=3326;
….
Ya está!
Para un resultado de más de 1000 updates, esta forma tardará mucho en ejecutarse, así que es mejor otras alternativas.
Comentar mejores opciones!! y si te parece interesante… compartir es vivir!
Gracias!
Yo siempre he hecho esto para cosas así: «update grabaciones set fecha_grabacion=fecha_creacion»
De todas formas lo que comentas es buena idea para casos más complejos porque mysql no deja usar subquerys que consulten la misma tabla a la que estas haciendo update.
Saludos!
Exacto! 🙂 Gracias!
Yo hago algo parecido pero sin hacer el concat desde el MySQL.Cojo las filas que quiero actualizar, las paso a un excel y las concateno las queries desde ahí para ejecutarlas posteriormente.Me parece más rápido tu método. A partir de ahora lo utilizaré 🙂
Hola! Hay gente que hacer maravillas con las Excel! El problema de utilizar Excel es que abrirlo, modificar columnas, etc, ya lleva su tiempo. Muchas gracias por el comentario 🙂