Cita:
Iniciado por manuparquegiralda
Claro que no te funciona porque estás haciendo una consulta con la variables $str que tiene tantos UPDATES como te de el bucle separados por punto y coma. Esto no permite hacerlo PHP creo que por razones de seguridad contra inyecciones sql.
Yo lo haría así si no voy a tener un número muy alto de este tipo de actualizaciones y no me comería la cabeza más de la cuenta:
Código PHP:
<?php
$resta = array(0 => 4, 1 => 0, 2 => 11);
$id = array(0 => 1, 1 => 6);
$resta = array_values(array_filter($resta));
for($k=0; isset($resta[$k]); $k++) {
mysql_query("UPDATE inventario.registro SET unidades_r = unidades_r - ".$resta[$k]." WHERE ID_R = ".$id[$k]."");
}
?>
También se puede utilizar el CASE de MYSQL algo así, aunque lo voy a hacer a boleo tomalo como una idea y ajustalo si no funciona:
Código PHP:
$resta = array(0 => 4, 1 => 0, 2 => 11);
$id = array(0 => 1, 1 => 6);
$resta = array_values(array_filter($resta));
$str = "";
for($k=0; isset($resta[$k]); $k++) {
$str .= " WHEN ".$id[$k]." THEN ".$resta[$k];
}
$sql= "UPDATE inventario.registro SET unidades_r CASE ID_R".$str." END WHERE ID_R IN (".implode(",", $id).")";
mysql_query($sql);
Repito, no sé si irá así exactamente pero si no por ahí van los tiros. Espero que todo esto te sirva para aprender a jugar con los bucles y los arrays un poquito mejor y te esfuerces en entender el código y no en copiar y pegar.
Un saludo.
Gracias Manu tienes razon no da como quiero tu forma da asi
Código PHP:
UPDATE inventario.registro SET unidades_r CASE ID_R WHEN 1 THEN 4 WHEN 6 THEN 11 END WHERE id IN (1,6)
y busco que de asi.
Código PHP:
UPDATE inventario.registro SET unidades_r = CASE ID_R WHEN 1 THEN unidades_r -4 WHEN 6 THEN unidades_r -11 END WHERE ID_R IN (1,6)
eso trato e dado bastante golpes con esto
![Golpeado](http://static.forosdelweb.com/fdwtheme/images/smilies/pelea.png)
primera vez que uso array , foreach, etc y he aprendido bastante vere si logro arregarlo