Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Update Multiple

Estas en el tema de Update Multiple en el foro de PHP en Foros del Web. Hola, a ver si alguien me puede ayudar. Lo que quiero es que al dar a un botón me actualice múltiples registros de una tabla. ...
  #1 (permalink)  
Antiguo 22/03/2014, 03:59
 
Fecha de Ingreso: febrero-2014
Mensajes: 7
Antigüedad: 10 años, 2 meses
Puntos: 0
Sonrisa Update Multiple

Hola, a ver si alguien me puede ayudar.
Lo que quiero es que al dar a un botón me actualice múltiples registros de una tabla.

El problema que tengo es que solo me actualiza el primero.

El código que tengo es el siguiente:

while ($rowgrupoalumno=mysql_fetch_array($result3))
{
if( $id_grupo == $rowgrupoalumno['id_grupo']) //
{
$arraygrupoalumno[]=$rowgrupoalumno["id_alumno"];
}
}

for($i=0; $i<count($arraygrupoalumno); $i++)
{
$query2="UPDATE alumno SET alta='Baja' WHERE id='$arraygrupoalumno[$i]'";
}

En el while guardo los id de los registros que quiero actualizar dentro de un array. Luego en el for recorro el array pero en vez de ir actualizando cada registro en cada entrada del for solo me lo hace una vez. En este caso con el primer id guardado en el array.

Gracias.
  #2 (permalink)  
Antiguo 22/03/2014, 05:38
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Update Multiple

Esto es un string que cambia de contenido a cada ciclo del bucle for....

Código PHP:
Ver original
  1. $query2="UPDATE alumno SET alta='Baja' WHERE id='$arraygrupoalumno[$i]'";

Es decir cuando ejecutes la consulta lo hara con el valor que tenga en ese momento, pero en el codigo que nos muestras no vemos donde ejecutas la consulta.

Solución (hay más):

Cambiar la consulta a la siguiente

UPDATE alumno SET alta='Baja' WHERE id IN ()";

y en el parentesis insertar la lista de ids


Código PHP:
Ver original
  1. $listaIds="";
  2. while ($rowgrupoalumno=mysql_fetch_array($result3)){
  3.       if( $id_grupo == $rowgrupoalumno['id_grupo']){
  4.           if($listaIds!="")$listaIds.=",";
  5.           $listaIds.=$rowgrupoalumno["id_alumno"];
  6.       }
  7. }
  8. $res=mysql_query("UPDATE alumno SET alta='Baja' WHERE id IN (".$listaIds.")";)) or die("Error: ".mysql_error());
  9.  
  10. if ($res) echo "Se ha dado de baja los siguientes alumnos:<br />".$listaIds;
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 25/03/2014, 06:20
 
Fecha de Ingreso: febrero-2014
Mensajes: 7
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Update Multiple

Gracias

Al leer la respuesta me di cuenta del fallo que cometia.
ponia: $result = mysql_query($query2);

fuera del for y por eso solo me actualizaba un registro. Lo que pasa que como en la misma pagina hago mas cosas lo colocara fuera para aprovechar la linea de código.

Muchas gracias.
  #4 (permalink)  
Antiguo 25/03/2014, 08:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Update Multiple

Mi solución ejecuta una sola query mientras la tuya, una vez corregido el error, hace tantas querys con elementos hayas seleccionado....

Es mejor reducir el numero de comunicaciones con el servidor...y en este caso es muy facil.... a pesar de lo dicho IN () no es la sentencia más efiente...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 25/03/2014, 10:07
 
Fecha de Ingreso: febrero-2014
Mensajes: 7
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Update Multiple

Gracias de nuevo.
Lo tendré en cuenta y voy a cambiarlo como tu me dices.
  #6 (permalink)  
Antiguo 25/03/2014, 10:27
Avatar de evolutionrgm  
Fecha de Ingreso: mayo-2011
Mensajes: 108
Antigüedad: 12 años, 11 meses
Puntos: 5
Respuesta: Update Multiple

si los registros se rigen por claves primarias del mismo tipo

Código MySQL:
Ver original
  1. UPDATE tb1
  2. tb1.columna1 old_valor ,
  3. tb2.columna2 new_valor
  4. FROM tabla1 tb1
  5. INNER JOIN tabla2 tb2
  6. ON (tb2.columna4 = tb1.columna4) AND tb2.columna3 IS NOT NULL
  7. )
  8. SET tb1.old_valor = tb2.new_valor
  #7 (permalink)  
Antiguo 25/03/2014, 12:07
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Update Multiple

Perdon?

Cita:
Iniciado por evolutionrgm Ver Mensaje
si los registros se rigen por claves primarias del mismo tipo

Código MySQL:
Ver original
  1. UPDATE tb1
  2. tb1.columna1 old_valor ,
  3. tb2.columna2 new_valor
  4. FROM tabla1 tb1
  5. INNER JOIN tabla2 tb2
  6. ON (tb2.columna4 = tb1.columna4) AND tb2.columna3 IS NOT NULL
  7. )
  8. SET tb1.old_valor = tb2.new_valor
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: registro, sql, tabla, 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 04:31.