Foros del Web » Programando para Internet » PHP »

actualizar diferentes registros ejecutando una consulta a una tabla

Estas en el tema de actualizar diferentes registros ejecutando una consulta a una tabla en el foro de PHP en Foros del Web. Hola, me he quedado medio trabado con este tema y despues de varias pero que varias horas de busqueda , lectura e infinidad de pruebas ...
  #1 (permalink)  
Antiguo 21/06/2011, 21:58
Avatar de midpunto  
Fecha de Ingreso: enero-2004
Ubicación: España Palma de mallorca
Mensajes: 118
Antigüedad: 20 años, 10 meses
Puntos: 0
Exclamación actualizar diferentes registros ejecutando una consulta a una tabla

Hola, me he quedado medio trabado con este tema y despues de varias pero que varias horas de busqueda , lectura e infinidad de pruebas recurro al foro a ver si me pueden hechar una mano el tema es el siguiente: tengo que actualizar el campo cantidad de diferentes artículos pero no logro hacer que el bucle funcione, este es el código que tengo:

while(mysql_num_rows>0){
mysql_select_db($database_conecta, $conecta);
$query_artics = "SELECT * FROM ventas_lin WHERE contrato_venlin = 1 ";
$artics = mysql_query($query_artics, $conecta) or die(mysql_error());
$row_artics = mysql_fetch_assoc($artics);
$totalRows_artics = mysql_num_rows($artics);
mysql_select_db($database_conecta, $conecta);
$updateSQL = "UPDATE aticulos set stock_art = stock_art + 1 where Id_art= '".$row_artics['artic_venlin']."'";
mysql_select_db($database_conecta, $conecta);
$Result1 = mysql_query($updateSQL, $conecta) or die(mysql_error());

}
¿Que estoy haciendo mal? agradezco cualquier ayuda un saludo.
  #2 (permalink)  
Antiguo 22/06/2011, 04:05
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: actualizar diferentes registros ejecutando una consulta a una tabla

Hola midpunto, la verdad es que no se entienda nada tu codigo, te paso un version comentada a ver si te ayudo, saludos:
Código PHP:
Ver original
  1. <?php
  2. while(mysql_num_rows>0){ //?? es una variablo o una funci´on?
  3.     mysql_select_db($database_conecta, $conecta); //Seleccionas db en cada vuelta del loop??
  4.     $query_artics = "SELECT * FROM ventas_lin WHERE contrato_venlin = 1 "; //Esta select es estatica, siempre es la misma, no tiene sentido que este en un bucle
  5.     $artics = mysql_query($query_artics, $conecta) or die(mysql_error());
  6.     $row_artics = mysql_fetch_assoc($artics);
  7.     $totalRows_artics = mysql_num_rows($artics);
  8.     mysql_select_db($database_conecta, $conecta); //otra conexion para hacer un update?
  9.     $updateSQL = "UPDATE aticulos set stock_art = stock_art + 1 where Id_art= '".$row_artics['artic_venlin']."'";
  10.     mysql_select_db($database_conecta, $conecta);
  11.     $Result1 = mysql_query($updateSQL, $conecta) or die(mysql_error());
  12.  
  13. }
  14.  
  15.  
  16. //<----------------------------
  17. //1. Conectarse a la db...
  18. //2. Seleccionar db, no entiendo por que necesitas dos pasos, pero ok
  19.     if(!mysql_select_db($database_conecta, $conecta))die(mysql_error());
  20.     $query_artics = "SELECT * FROM ventas_lin WHERE contrato_venlin = 1 ";
  21.     if(!$query = mysql_query($query_artics))die(mysql_error()." en linea 18");
  22.     //Mientras haya resultados, actualizar la otra tabla
  23.     while($f = mysql_fetch_assoc($query))
  24.     {
  25.     $updateSQL = "UPDATE aticulos set stock_art = stock_art + 1 where Id_art= '".$row_artics['artic_venlin']."'";
  26.     if(!$query2 = mysql_query($updateSQL))die(mysql_error()." en linea 25");
  27.     }
  28.     //Liberar resultados
  29.     mysql_free_result($query);
  30.  
  31. ?>
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 22/06/2011, 11:48
Avatar de midpunto  
Fecha de Ingreso: enero-2004
Ubicación: España Palma de mallorca
Mensajes: 118
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: actualizar diferentes registros ejecutando una consulta a una tabla

Gracias por contestar, si a esas horas lo que publique estaba bastante mal, por otra parte he seguido tu código de ejemplo pero no hay forma de hacerlo funcionar de esta forma directamente no me actualiza ninguno de los registros, de esta otra manera me actualiza solamente uno:
Código PHP:
//conexion y consulta
mysql_select_db($database_conecta$conecta);
$query_artics "SELECT * FROM ventas_lin WHERE contrato_venlin = $id_ven ";
$artics mysql_query($query_artics$conecta) or die(mysql_error());
$row_artics mysql_fetch_assoc($artics);
$totalRows_artics mysql_num_rows($artics);
//bucle para actualizar todos los registros que correspondan a esta id obtenida de la select
while ($row=mysql_fetch_assoc($artics)){ 
mysql_select_db($database_conecta$conecta);
$updateSQL "UPDATE aticulos set stock_art = $stock_udp + '".$row_artics['cant_venlin']."' where Id_art= '".$row_artics['artic_venlin']."'";
mysql_select_db($database_conecta$conecta);
  
$Result1 mysql_query($updateSQL$conecta) or die(mysql_error());
 } 
En que me estoy equivocando? Gracias y saludos.
  #4 (permalink)  
Antiguo 22/06/2011, 15:48
Avatar de midpunto  
Fecha de Ingreso: enero-2004
Ubicación: España Palma de mallorca
Mensajes: 118
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: actualizar diferentes registros ejecutando una consulta a una tabla

Bueno es una lastima la poca colaboración aunque tambien agradecido a "repara2" por brindarme su ayuda, finalmente pude solucionar mi problema y aqui les dejo el código por si a alguien le sirve:
Código PHP:
 //conexion y consulta
$maxRows_artics 10;
$pageNum_artics 0;
if (isset(
$_GET['pageNum_artics'])) {
  
$pageNum_artics $_GET['pageNum_artics'];
}
$startRow_artics $pageNum_artics $maxRows_artics;

mysql_select_db($database_conecta$conecta);
$query_artics "SELECT * FROM ventas_lin WHERE contrato_venlin = 1 ";
$query_limit_artics sprintf("%s LIMIT %d, %d"$query_artics$startRow_artics$maxRows_artics);
$artics mysql_query($query_limit_artics$conecta) or die(mysql_error());
$row_artics mysql_fetch_assoc($artics);

if (isset(
$_GET['totalRows_artics'])) {
  
$totalRows_artics $_GET['totalRows_artics'];
} else {
  
$all_artics mysql_query($query_artics);
  
$totalRows_artics mysql_num_rows($all_artics);
}
$totalPages_artics ceil($totalRows_artics/$maxRows_artics)-1;

echo 
"<span class=aviso>Actualizando  el stok de los siguientes artículos:</span><BR>
<table border=0 cellspacing=2 width=40%>
  <tr>
    <td class=txtablec><strong>Artículo ID</strong></td>
    <td class=txtablec><strong>Nombre</strong></td>
    <td class=txtablec><strong>Cantidad</strong></td>
    <td class=txtablec><strong>PVP</strong></td>
    <td class=txtablec><strong>Nº de contrato</strong></td>
  </tr>"
;
   do { 
    echo 
"<tr>"
//bucle para actualizar todos los registros que correspondan a esta id obtenida de la select

mysql_select_db($database_conecta$conecta);
$updateSQL "UPDATE aticulos set stock_art = stock_art + '".$row_artics['cant_venlin']."' where id_art = '".$row_artics['artic_venlin']."'";
mysql_select_db($database_conecta$conecta);
$Result1 mysql_query($updateSQL$conecta) or die(mysql_error());
//muestro los artículos que seran actualizados
     
echo "<td class=txtablec>".$row_artics['artic_venlin']."</td>";
     echo 
"<td class=txtablec>".$row_artics['nomart_venlin']."</td>";
     echo 
"<td class=txtablec>".$row_artics['cant_venlin']."</td>";
     echo 
"<td class=txtablec>".$row_artics['pvp_venlin']."</td>";
     echo 
"<td class=txtablec>".$row_artics['contrato_venlin']."</td>";
    echo 
"</tr>";
  } while (
$row_artics mysql_fetch_assoc($artics));
echo 
"</table>";
echo 
"<BR><BR><span class=txtablec> stok Actualizando correctamente, anulando contrato...</span>";

Si se observa he solucionado con while y do para poder armar el bucle, recorrer , mostrar y actualizar cada uno de los registros que cumplen con la condicion "where" en la select.
Un saludo.

Última edición por midpunto; 22/06/2011 a las 16:56
  #5 (permalink)  
Antiguo 24/06/2011, 00:20
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: actualizar diferentes registros ejecutando una consulta a una tabla

ok, aun no entiendo porque haces tantos mysql_select_db(), pero si funciona ok, salu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #6 (permalink)  
Antiguo 25/06/2011, 09:54
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: actualizar diferentes registros ejecutando una consulta a una tabla

Cita:
Iniciado por repara2 Ver Mensaje
ok, aun no entiendo porque haces tantos mysql_select_db(), pero si funciona ok, salu2

Lo mismo digo. Generalmente en proyectos normales se selecciona la db tras hacer la coneccion. Y no mas. Acá estas teniendo un error de concepto grosso.
  #7 (permalink)  
Antiguo 05/07/2011, 11:47
Avatar de midpunto  
Fecha de Ingreso: enero-2004
Ubicación: España Palma de mallorca
Mensajes: 118
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: actualizar diferentes registros ejecutando una consulta a una tabla

Cita:
Iniciado por mayid Ver Mensaje
Lo mismo digo. Generalmente en proyectos normales se selecciona la db tras hacer la coneccion. Y no mas. Acá estas teniendo un error de concepto grosso.
vale... VALE!! tanto como error de concepto no me parece,.. pero bueno esto es solamente una serie de pruebas que realizo y lógicamente el código lo limpio,.. pero creo que aquí lo importante era aportar una solución y es lo que acabo de hacer y funciona perfectamente. Si alguien me puede mostrar un camino distinto o mejor pero con el mismo resultado bienvenido sea.. la cuestión es aprender al menos para mi.
Saludos.
  #8 (permalink)  
Antiguo 05/07/2011, 12:15
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: actualizar diferentes registros ejecutando una consulta a una tabla

Cita:
tanto como error de concepto no me parece
Es un error conceptual y procedimental.
Cada vez que haces eso le estás agregando "ruido" a la aplicación porque le estás enviando, via Internet, una petición a la base de datos para que haga algo que no necesita hacer. En otras palabras, solamente le estás agregando overhead sin ninguna necesidad.
Imaginate que eso lo hicieras en un While, una vez por registro, y tuvieses 5000 registros para procesar. ¿Te imaginas el efecto a largo plazo?

O sea: No hagas cosas que ya hiciste. Es más fácil verificar si la conexión está activa y la base ya seleccionada, porque ambas cosas se resuelven en el PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 05/07/2011, 13:55
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: actualizar diferentes registros ejecutando una consulta a una tabla

Cita:
Imaginate que eso lo hicieras en un While
Es que ademas lo estaba haciendo en un while!

Código PHP:
Ver original
  1. while(mysql_num_rows>0){
  2.  mysql_select_db($database_conecta, $conecta);
  3.  $query_artics = "SELECT * FROM ventas_lin WHERE contrato_venlin = 1 ";
  4.  $artics = mysql_query($query_artics, $conecta) or die(mysql_error());
  5.  $row_artics = mysql_fetch_assoc($artics);
  6.  $totalRows_artics = mysql_num_rows($artics);
  7.  mysql_select_db($database_conecta, $conecta);
  8.  $updateSQL = "UPDATE aticulos set stock_art = stock_art + 1 where Id_art= '".$row_artics['artic_venlin']."'";
  9.  mysql_select_db($database_conecta, $conecta);
  10.  $Result1 = mysql_query($updateSQL, $conecta) or die(mysql_error());
  11.  
  12.  }
  #10 (permalink)  
Antiguo 05/07/2011, 16:15
Avatar de victor_aguilar  
Fecha de Ingreso: junio-2011
Ubicación: México DF
Mensajes: 67
Antigüedad: 13 años, 5 meses
Puntos: 10
Respuesta: actualizar diferentes registros ejecutando una consulta a una tabla

no tienes una variable que le diga al while que avance y cuando terminar el proceso, la condición actual siempre se cumple con un solo registro
Salu2
__________________
"... tiene la vida un lánguido argumento que no se acaba nunca de aprender"
Joaquín Sabina
  #11 (permalink)  
Antiguo 05/07/2011, 16:21
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: actualizar diferentes registros ejecutando una consulta a una tabla

Cierto. Evalua en true.
  #12 (permalink)  
Antiguo 06/07/2011, 02:42
Avatar de midpunto  
Fecha de Ingreso: enero-2004
Ubicación: España Palma de mallorca
Mensajes: 118
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: actualizar diferentes registros ejecutando una consulta a una tabla

Se ve que cuando me expreso lo hago mal.. el codigo es de "muestra" por si a alguien le sirve, y si, correcto.. hay conexiones de mas eso lo reconozco es solamente quitarlas y listo eso no significa que no sirva o que este tan equivocado conceptualmente hablando, por otra parte el codigo me actualiza perfectamente los registros que cumplen con la condicion y aparte me los imprime funcionando perfectamente. Si alguien tiene una solución mejor o por otra parte mi solución esta equivocada pues muestrennos a los lectores un código mejor, se agradece. A mi este códgo me funciona y con toda la mejor intención y como no encontre en todo el foro una solución a este tipo de problema lo publico.
  #13 (permalink)  
Antiguo 06/07/2011, 07:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: actualizar diferentes registros ejecutando una consulta a una tabla

Bueno, mira, a mi entender esto hace lo mismo que tu quieres hacer, pero con un código más simple y fácil de entender:
Código PHP:
Ver original
  1. mysql_select_db($database_conecta, $conecta);
  2. $query_artics = "SELECT * FROM ventas_lin WHERE contrato_venlin = 1";
  3. $artics = mysql_query($query_artics, $conecta) or die(mysql_error());
  4. if($artics)
  5.     {
  6.     while ($row_artics = mysql_fetch_assoc($artics))
  7.         {
  8.         $updateSQL = "UPDATE aticulos set stock_art = stock_art + 1 where Id_art= '" . $row_artics['artic_venlin'] . "'";
  9.         $result1 = mysql_query($updateSQL, $conecta) or die(mysql_error());
  10.         }
  11.     }

Pero por otro lado, aprovechando los recursos de ambos lenguajes (PHP y SQL), esto otro hace exactamente lo mismo pero en una sola operación:
Código PHP:
Ver original
  1. mysql_select_db($database_conecta, $conecta);
  2. $query_artics = "UPDATE aticulos SET stock_art = stock_art + 1 WHERE Id_art IN(SELECT artic_venlin FROM ventas_lin WHERE contrato_venlin = 1)";
  3. $artics = mysql_query($query_artics, $conecta) or die(mysql_error());
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 06/07/2011, 12:48
Avatar de midpunto  
Fecha de Ingreso: enero-2004
Ubicación: España Palma de mallorca
Mensajes: 118
Antigüedad: 20 años, 10 meses
Puntos: 0
Respuesta: actualizar diferentes registros ejecutando una consulta a una tabla

Hola y gracias por contestar, muy buena tu respuesta y la verdad es que lo haces algo mas simple, lo probare. De momento mi codigo"limpio" completo ejecutando la consulta, actualizando e imprimiendo los resultados, es este:

Código PHP:
//conexion y consulta

mysql_select_db($database_conecta$conecta);

$query_artics "SELECT * FROM ventas_lin WHERE contrato_venlin = 1 ";
$artics mysql_query($query_limit_artics$conecta) or die(mysql_error());
$row_artics mysql_fetch_assoc($artics);


echo 
"<span class=aviso>Actualizando  el stok de los siguientes artículos:</span><BR>
<table border=0 cellspacing=2 width=40%>
  <tr>
    <td class=txtablec><strong>Artículo ID</strong></td>
    <td class=txtablec><strong>Nombre</strong></td>
    <td class=txtablec><strong>Cantidad</strong></td>
    <td class=txtablec><strong>PVP</strong></td>
    <td class=txtablec><strong>Nº de contrato</strong></td>
  </tr>"
;
   do { 
    echo 
"<tr>"
//bucle para actualizar todos los registros que correspondan a esta id obtenida de la select

$updateSQL "UPDATE aticulos set stock_art = stock_art + '".$row_artics['cant_venlin']."' where id_art = '".$row_artics['artic_venlin']."'";
mysql_select_db($database_conecta$conecta);
$Result1 mysql_query($updateSQL$conecta) or die(mysql_error());
//muestro los artículos que seran actualizados
     
echo "<td class=txtablec>".$row_artics['artic_venlin']."</td>";
     echo 
"<td class=txtablec>".$row_artics['nomart_venlin']."</td>";
     echo 
"<td class=txtablec>".$row_artics['cant_venlin']."</td>";
     echo 
"<td class=txtablec>".$row_artics['pvp_venlin']."</td>";
     echo 
"<td class=txtablec>".$row_artics['contrato_venlin']."</td>";
    echo 
"</tr>";
  } while (
$row_artics mysql_fetch_assoc($artics));
echo 
"</table>";
echo 
"<BR><BR><span class=txtablec> stok Actualizando correctamente, anulando contrato...</span>";

Saludos y gracias nuevamente por la respuesta, para mi esta todo más que solucionado.

Última edición por midpunto; 06/07/2011 a las 13:08

Etiquetas: mysql
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 22:18.