Hace poco se me presentó un caso similar en el trabajo, en el cual, tenía un array que contenías arrays de información (un array asociativo), con la particularidad de que, cada array hijo, contenía la información de todos los registros a actualizar y no los tenías por separado, en otras palabras, tenía algo como esto:
Código PHP:
Ver original 'nombre' => Array( //Nombres 0 => 'Juan',
1 => 'Luis',
2 => 'José'
),
'apellido' => Array( //Apellidos 0 => 'Pérez',
1 => 'Gonzáles',
2 => 'Gómez'
),
0 => 25,
1 => 3,
2 => 159
),
'usuario' => 123
)
Y como hace un tiempo leí que ejecutar consultas SQL en un bucle con PHP no era muy eficiente que digamos, decidí utilizar la sintaxis
CASE WHEN THEN END
, que es así:
De este modo, actualizo a los tres registros en los dos campos (nombre y apellido), siempre y cuando el usuario que esté realizando la edición, tenga por identificador el '123'.
Para formar la cadena de consulta con PHP, utilicé un bucle con el cual recorrí al primer hijo del bucle padre, excepto al último pues no es un array. Antes de esto, creé dos variables en las cuales iré concatenando los valores. En cada iteración, concateno en cada variable los valores, más o menos así:
Código PHP:
Ver original//Todos los datos fueron desinfectados antes de llegar a este punto y los extraje del array padre con la función extract()
//El array con los nombres se llama $nombre y el de apellidos, $apellido
$consulta = 'UPDATE tabla SET ';
$nombres = 'nombre = CASE id ';
$apellidos = 'END, apellido = CASE id ';
$condicion = 'WHERE usuario = ' . $usuario;
for ($i = 0, $l = count($nombre); $i < $l; $i++){ $nombres .= "WHEN " . $id[$i] . " THEN '" . $nombre[$i] . "' ";
$apellidos .= "WHEN " . $id[$i] . " THEN '" . $apellido[$i] . "' ";
}
$consulta .= $nombres . $apellidos . ' END ' . $condicion;
Ojalá pueda serte de ayuda.
Saludos