Foros del Web » Programando para Internet » PHP »

ejecutar multiples updates en una sola consulta

Estas en el tema de ejecutar multiples updates en una sola consulta en el foro de PHP en Foros del Web. Hola amigos, escribo por aqui en busca de ayuda, y si alguien me puede ayudar se que sn ustedes. tengo el siguiente ejercicio en problema ...
  #1 (permalink)  
Antiguo 23/04/2015, 19:26
 
Fecha de Ingreso: septiembre-2013
Mensajes: 32
Antigüedad: 10 años, 7 meses
Puntos: 0
ejecutar multiples updates en una sola consulta

Hola amigos, escribo por aqui en busca de ayuda, y si alguien me puede ayudar se que sn ustedes.

tengo el siguiente ejercicio en problema ya que estoy intentando realizar un update multiple en una sola.

estoy enviando por medio de ajax las variables estas variables contienen los ID de la tabla mysql con esos ID hago un while para obtner ciertos campos los cuales llevo en un array. pero a la misma ves quiero hacer un update a un campo en la tabla donde el ID sea los ID que recoja la variable enviada en ajax.

logro hacer el update, pero me lo hace la cantidad igual al numero de ID recogidos me explico estoy intentando hacer esto.

tengo lo siguiente:
Código PHP:

Tabla 
oferts
campo 
ID
campo
rest es un numero ejemplo 200 )

ejecuto :

include(
'config.php');
$jsondata = array();
//$auctions=$_POST['clave']; // esta la variable que recibo con ajax la cual contiene esto:

$auctions '3&4&5&6&'// son los ID , actualmente recibo 4 pero puede variar ser mas o ser menos.


$extraer=explode("&"$auctions);
$arr =($extraer);

$id $arr;

if( 
is_array($id) ) {
        
$id array_map('intval'$id);
        
$querywhere "WHERE `ID` IN (" implode','$id ) . ")";
    } else {
        
$id intval($id);
        
$querywhere "WHERE `ID` = " $id;
    }






$very2 mysql_query"SELECT * FROM `oferts` " $querywhere ) or die(mysql_error());    
$result mysql_num_rows($very2);
while (
$obj mysql_fetch_object($very2)) {
    
$arr2 = array('ID' => $obj->id,
                   
'T' => $obj->time
                   
'R' => $obj->rest,
                   
'OF' => $obj->ofertante,
                   

        );



    
      
$restar="UPDATE oferts SET rest = rest - '1' '"$querywhere;
      
mysql_query($restar,$con) or die('Error. '.mysql_error());

// pero resulta que en ves de restarme uno me resta es la cantidad de id recibidos, 
//ejemplo actualemnte recibo 4 ID (3,4,5,6) en la variable que envia ajax y este UPDATE me resta 4
 //en vez de uno, si recibo 6 ID en la variable me resta 6. y no entiendo como hacer que solo
 //me reste 1 en cada uno de los ID recibidos.
    

   
$jsondata[]['A']=$arr2;
    
    
}


echo 
json_encode($jsondata,JSON_FORCE_OBJECT);
exit(); 
espero puedan ayudarme amigos.
  #2 (permalink)  
Antiguo 24/04/2015, 07:51
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: ejecutar multiples updates en una sola consulta

Imprime la consulta antes de que la ejecutes para que puedas observar si es lo que esperas.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 24/04/2015, 08:09
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: ejecutar multiples updates en una sola consulta

Por lo pronto, esto:
Código PHP:
 $restar="UPDATE oferts SET rest = rest - '1' '"$querywhere
Sin la variable contuviese esto:
Código PHP:
$querywhere "WHERE `ID` = 6"
daría como resultado:
Código SQL:
Ver original
  1. UPDATE oferts SET rest = rest - '1' 'WHERE `ID` = 6;
porque tienes un apostrofe de mas en el UPDATE, al final de la linea.
Su resultado puede ser de lo más inseguro...

Acostúmbrate a no poner los números como cadenas de texto en el SQL. Generan errores de proceso o conversión inesperados.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: multiples, mysql, select, sql, tabla, variable
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 20:08.