Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Update múltiples condiciones

Estas en el tema de Update múltiples condiciones en el foro de Mysql en Foros del Web. Quiero hacer un UPDATE múltiple de la siguiente forma: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original UPDATE caracteristicas_hardware SET marca = 'Western Digital' , modelo = ...
  #1 (permalink)  
Antiguo 31/07/2013, 11:35
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 10 años, 9 meses
Puntos: 2
Update múltiples condiciones

Quiero hacer un UPDATE múltiple de la siguiente forma:
Código MySQL:
Ver original
  1. UPDATE caracteristicas_hardware SET marca = 'Western Digital', modelo = 'WD10', serial = ' 544887s78d', observaciones_h = '350 GB' WHERE id_hardware = '1' and codigo = '001';
Este es solo la modificación de una fila, como hago si quiero hacer lo mismo en otras filas dependiendo del ID que en los casos sucesivos seria '2','3','4','5', pero con diferentes valores pero todos dependiendo del 'codigo' el cual debe ser el mismo en todas las filas. Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 31/07/2013, 12:07
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Update múltiples condiciones

Hola AnGuisi:

vayamos por partes... ¿los datos que vas a actualizar para todos los registros es la misma? si es así, lo único que tienes que hacer es poner una condición tipo IN en lugar de una condición de igual


Código MySQL:
Ver original
  1. UPDATE caracteristicas_hardware
  2. SET marca = 'Western Digital',
  3.     modelo = 'WD10',
  4.     SERIAL = ' 544887s78d',
  5.     observaciones_h = '350 GB'
  6.     id_hardware IN ('1', '2', '3', '4', '5') AND
  7.     codigo = '001';

Todos los registros que cumplan la condición quedarían con la misma información que pones en el SET...

ahora bien, si la información que deseas colocar en cada registro es diferente, entonces no puedes hacer la actualización de esta manera... si esta informaicón estuviera contenida por ejemplo en una tabla, podrías hacer de un UPDATE con múltiples tablas... checa el ejemplo:

Código MySQL:
Ver original
  1. mysql> mysql> SELECT * FROM tabla_original;
  2. +-------------+--------+-------+--------+--------+-----------------+
  3. | id_hardware | codigo | marca | modelo | serial | observaciones_h |
  4. +-------------+--------+-------+--------+--------+-----------------+
  5. |           1 | 001    | marca | modelo | serial | observaciones_h |
  6. |           2 | 001    | marca | modelo | serial | observaciones_h |
  7. |           3 | 001    | marca | modelo | serial | observaciones_h |
  8. |           6 | 001    | marca | modelo | serial | observaciones_h |
  9. +-------------+--------+-------+--------+--------+-----------------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM tabla_actualizada;
  13. +-------------+--------+-----------------+---------+--------------+-----------------+
  14. | id_hardware | codigo | marca           | modelo  | serial       | observaciones_h |
  15. +-------------+--------+-----------------+---------+--------------+-----------------+
  16. |           1 | 001    | Western Digital | WD10    | 544887s78d   | 350 GB    |
  17. |           2 | 001    | SAMSUNG         | 1234    | 12345asdfg   | 1 T    |
  18. |           3 | 002    | Hitachi         | ISO2013 | qwerty987654 | 3 T    |
  19. +-------------+--------+-----------------+---------+--------------+-----------------+
  20. 3 rows in set (0.00 sec)
  21.  
  22. mysql> UPDATE tabla_original T1
  23.     -> INNER JOIN tabla_actualizada T2 ON
  24.     ->     T1.id_hardware = T2.id_hardware AND
  25.     ->     T1.codigo = T2.codigo
  26.     -> SET T1.marca = T2.marca,
  27.     ->     T1.modelo = T2.modelo,
  28.     ->     T1.serial = T2.serial,
  29.     ->     T1.observaciones_h = T2.observaciones_h
  30.     -> WHERE
  31.     -> T1.id_hardware IN ('1', '2', '3', '4', '5') AND
  32.     -> T1.codigo = '001';
  33. Query OK, 0 rows affected (0.04 sec)
  34. Rows matched: 2  Changed: 0  Warnings: 0
  35.  
  36. mysql> SELECT * FROM tabla_original;
  37. +-------------+--------+-----------------+--------+------------+-----------------+
  38. | id_hardware | codigo | marca           | modelo | serial     | observaciones_h |
  39. +-------------+--------+-----------------+--------+------------+-----------------+
  40. |           1 | 001    | Western Digital | WD10   | 544887s78d | 350 GB |
  41. |           2 | 001    | SAMSUNG         | 1234   | 12345asdfg | 1 T |
  42. |           3 | 001    | marca           | modelo | serial     | observaciones_h |
  43. |           6 | 001    | marca           | modelo | serial     | observaciones_h |
  44. +-------------+--------+-----------------+--------+------------+-----------------+
  45. 4 rows in set (0.00 sec)

Observa que sólo los dos primeros registros se actualizaron con los valores de la tabla_actualizada... en el caso del id_hardware = 3, este existe en la tabla_actualizada, pero tiene un código distinto, en el caso de id_harware=6 este no existe en la tabla_actualizada.

No sé si esto te sea de ayuda, por favor coméntanos cualquier detalle

Saludos
Leo.
  #3 (permalink)  
Antiguo 31/07/2013, 13:39
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Update múltiples condiciones

Si amigo entiendo mas o menos lo que me intentas explicar. Los datos a insertar si son diferentes por cada ID.

ejemplo tengo $marcadiscoduro $modelodiscoduro, $marcatarjeta, $modelotarjeta. Y cada componente tiene un ID distinto. Entonces la idea es realizar la operacion en todos los componentes hardware dependiendo del ID y del Código asociado. Es algo como hiciste en el segundo ejemplo pero en este caso los datos los paso por variables en php y no están en otra tabla. Como podría hacerlo asi de manera digamos "mas directa"?.
  #4 (permalink)  
Antiguo 31/07/2013, 13:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Update múltiples condiciones

Cita:
Si amigo entiendo mas o menos lo que me intentas explicar. Los datos a insertar si son diferentes por cada ID.
Entonces no puedes hacerlo en una única consulta UPDATE.
Deberás hacerla una a una.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 31/07/2013, 14:00
Avatar de AnGuisi  
Fecha de Ingreso: julio-2013
Ubicación: San Felipe - Yaracuy
Mensajes: 122
Antigüedad: 10 años, 9 meses
Puntos: 2
Respuesta: Update múltiples condiciones

Okey, eso pensé. Muchas gracias :D

Etiquetas: condiciones, update
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:37.