2012-07-26 9 views
31
$query = mysql_query("UPDATE a SET fruit = '**apple**' WHERE id = '**1**' "); 
$query2 = mysql_query("UPDATE a SET fruit = '**orange**' WHERE id = '**2**' "); 
$query3 = mysql_query("UPDATE a SET fruit = '**peach**' WHERE id = '**3**' "); 

¿hay alguna forma de simplificarlo para una consulta?Cómo actualizar datos de mysql a granel con una consulta?

+0

tiene valor para la fruta y la identificación están en la matriz? – Jalpesh

+0

quiero decir que el valor de la fruta y el ID ¿cómo se puede obtener? – Jalpesh

Respuesta

48

Si usted puede hacerlo usando esta consulta:

UPDATE a 
SET fruit = (CASE id WHEN 1 THEN 'apple' 
        WHEN 2 THEN 'orange' 
        WHEN 3 THEN 'peach' 
      END) 
WHERE id IN(1,2 ,3); 
+0

'case id cuando 1 luego 'apple' cuando 2 entonces ...' es una alternativa. –

+0

sí, ¡gracias! publicación actualizada! – Omesh

+0

Eres genial Omesh! –

48

he encontrado una solución siguiente:

INSERT into `table` (id,fruit) 
    VALUES (1,'apple'), (2,'orange'), (3,'peach') 
    ON DUPLICATE KEY UPDATE fruit = VALUES(fruit); 

ID debe ser clave única o primaria. Pero no sé sobre el rendimiento.

+0

Esto funciona para mí. Me pregunto por qué mysql no implementó una declaración de actualización masiva. –

+0

¿Puede ser que piensen que las declaraciones preparadas son lo suficientemente buenas? – Yaroslav

+1

Solución ideal para algunos casos de uso, pero esto no funcionará si 'table' tiene una columna requerida' b' que no tiene valor predeterminado, incluso si los registros que se están actualizando ya han definido este valor. Actualización de solo partes de un registro existente requiere un enfoque diferente. –

-6

Sí, esto es posible mediante la ejecución de este; Espero que funcione.

actualizar un SET fruta = (CASE ID cuando 1 ENTONCES 'manzana' CUANDO 2 ENTONCES 'naranja' CUANDO 3 ENTONCES 'melocotón' END) DONDE EN id (1,2, 3);

+2

Esto es literalmente una copia/pega de la respuesta aceptada – Kip

Cuestiones relacionadas