Foros del Web » Programando para Internet » PHP »

Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Estas en el tema de Leer campos de MySQL, Realizar cálculos, Almacenar el resultado en el foro de PHP en Foros del Web. Tengo una tabla con información en 6 campos. Debo leer cada fila y hacer operaciones, posteriormente almacenar el resultado en el campo7. Para simplificar mi ...
  #1 (permalink)  
Antiguo 13/07/2010, 22:41
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Tengo una tabla con información en 6 campos.
Debo leer cada fila y hacer operaciones, posteriormente almacenar el resultado en el campo7.

Para simplificar mi explicación, imaginemos que deseo sumar el valor de los 6 campos y almacenarlo en campo7, lo haría así:

$consulta = mysql_query("SELECT llave, campo1, campo2 FROM tabla", $link) OR die ("No se pudo ejecutar la consulta");

while ($fila = mysql_fetch_row($consulta)) {
$llave = $fila[0];
$campo1 = $fila[1];
$campo2 = $fila[2];
$campo3 = $fila[2];
$campo4 = $fila[2];
$campo5 = $fila[2];
$campo6 = $fila[2];

# Realizar cálculos:
$campo7=$campo1+$campo2+$campo3+$campo4+$campo5+$c ampo6
}

¿Como puedo almacenar campo7?
¿Como seguiría leyendo el resto de filas?

La secuencia del proceso debe ser así (para todas las filas):
1. Leer la fila
2. Hacer operaciones con PHP
3. Almacenar el resultado determinado con PHP
4. Leer el registro siguiente
5. Volver al paso 2




Espero haberme explicado.
  #2 (permalink)  
Antiguo 13/07/2010, 22:54
Avatar de elchicho118  
Fecha de Ingreso: mayo-2010
Mensajes: 74
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

debes hacer un update con la variable campo7
  #3 (permalink)  
Antiguo 13/07/2010, 22:58
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

mysql_query("INSERT INTO tabla(campo7) values ('$campo7')", $link)


y si lo quieres colocar en la misma fila

mysql_query("UPDATE tabla SET campo7='$campo7'", $link)

pero si lo haces de esa forma te actualizara todos los campos7 debe colocar un where de algo que sea unico en cada campo


mysql_query("UPDATE tabla SET campo7='$campo7' where id=$id", $link)
  #4 (permalink)  
Antiguo 13/07/2010, 22:59
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Cita:
Iniciado por elchicho118 Ver Mensaje
debes hacer un update con la variable campo7
Gracias por tu respuesta, claro que debo hacer update, pero donde colocaría el update? y como seguir leyendo la fila siguiente, y así sucesivamente?
  #5 (permalink)  
Antiguo 13/07/2010, 23:03
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Cita:
Iniciado por johhan16 Ver Mensaje
mysql_query("INSERT INTO tabla(campo7) values ('$campo7')", $link)
Entiendo que no he planteado adecuadamente mi necesidad, la replanteo:

Mi tabla tiene los siguientes campos:
  • llave int(5)
  • campo1 int(5)
  • campo2 int(5)
  • campo3 int(5)
  • campo4 int(5)
  • campo5 int(5)
  • campo6 int(5)
  • campo7 int(5)

Recorro así la tabla:

Código PHP:
Ver original
  1. $consulta = mysql_query("SELECT llave, campo1, campo2 FROM tabla", $link) OR die ("No se pudo ejecutar la consulta");
  2.  
  3. while ($fila = mysql_fetch_row($consulta)) {
  4. $llave = $fila[0];
  5. $campo1 = $fila[1];
  6. $campo2 = $fila[2];
  7. $campo3 = $fila[3];
  8. $campo4 = $fila[4];
  9. $campo5 = $fila[5];
  10. $campo6 = $fila[6];
  11.  
  12. # Realizar cálculos:
  13. $campo7=$campo1+$campo2+$campo3+$campo4+$campo5+$c ampo6
  14. }

¿Donde debo colocar el update y poder seguir leyendo la fila siguiente?
  #6 (permalink)  
Antiguo 13/07/2010, 23:06
Avatar de elchicho118  
Fecha de Ingreso: mayo-2010
Mensajes: 74
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Cita:
Iniciado por Bier Ver Mensaje
Gracias por tu respuesta, claro que debo hacer update, pero donde colocaría el update? y como seguir leyendo la fila siguiente, y así sucesivamente?

asi
Código PHP:
Ver original
  1. $consulta = mysql_query("SELECT llave, campo1, campo2 FROM tabla", $link) OR die ("No se pudo ejecutar la consulta");
  2.  
  3. $can= mysql_num_rows($consulta);
  4. while ($can>0){
  5.  
  6.  if ($row = mysql_fetch_array($consulta)) {
  7. $llave = $fila[0];
  8. $campo1 = $fila[1];
  9. $campo2 = $fila[2];
  10. $campo3 = $fila[2];
  11. $campo4 = $fila[2];
  12. $campo5 = $fila[2];
  13. $campo6 = $fila[2];
  14.  
  15. # Realizar cálculos:
  16. $campo7=$campo1+$campo2+$campo3+$campo4+$campo5+$c ampo6
  17.  
  18. $registros=mysql_query("update llave set campo7='$campo7'",$link) or
  19.   die("Problemas en el select:".mysql_error());
  20. }
  21. $can--;
  22. }

mas o menos hay tienes una idea
  #7 (permalink)  
Antiguo 13/07/2010, 23:08
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Código PHP:
  <?
      $consulta 
mysql_query("SELECT llave, campo1, campo2 FROM tabla"$link) OR die ("No se pudo ejecutar la consulta");

      while (
$fila mysql_fetch_row($consulta)) {
      
$llave $fila[0];
      
$campo1 $fila[1];
      
$campo2 $fila[2];
      
$campo3 $fila[3];
      
$campo4 $fila[4];
      
$campo5 $fila[5];
      
$campo6 $fila[6];
      
# Realizar cálculos:
      
$campo7=$campo1+$campo2+$campo3+$campo4+$campo5+$campo6

      mysql_query
("UPDATE tabla SET campo7='$campo7' where llave=$llave"$link
      } 
?>
yo estoy suponiendo que el que dice llave es un valor unico para cada fila
  #8 (permalink)  
Antiguo 13/07/2010, 23:11
Avatar de elchicho118  
Fecha de Ingreso: mayo-2010
Mensajes: 74
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Cita:
Iniciado por johhan16 Ver Mensaje
Código PHP:
  <?
      $consulta 
mysql_query("SELECT llave, campo1, campo2 FROM tabla"$link) OR die ("No se pudo ejecutar la consulta");

      while (
$fila mysql_fetch_row($consulta)) {
      
$llave $fila[0];
      
$campo1 $fila[1];
      
$campo2 $fila[2];
      
$campo3 $fila[3];
      
$campo4 $fila[4];
      
$campo5 $fila[5];
      
$campo6 $fila[6];
      
# Realizar cálculos:
      
$campo7=$campo1+$campo2+$campo3+$campo4+$campo5+$campo6

      mysql_query
("UPDATE tabla SET campo7='$campo7' where llave=$llave"$link
      } 
?>
yo estoy suponiendo que el que dice llave es un valor unico para cada fila
llave es la tabla en la base de datos
  #9 (permalink)  
Antiguo 13/07/2010, 23:18
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Cita:
Iniciado por elchicho118 Ver Mensaje
llave es la tabla en la base de datos

no te entiendo lo que quieres decir, pero si no tienes un valor unico, entonces deberias crearlo, puede ser un ID con un campo que se autoincremente
  #10 (permalink)  
Antiguo 13/07/2010, 23:20
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Código PHP:
Ver original
  1. $consulta = mysql_query("SELECT llave, campo1, campo2, campo3, campo4, campo5, campo6 FROM tabla", $link) OR die ("No se pudo ejecutar la consulta");
  2.  
  3. $can= mysql_num_rows($consulta);
  4. while ($can>0){
  5.  
  6.     if ($row = mysql_fetch_array($consulta)) {
  7.         $llave = $fila[0];
  8.         $campo1 = $fila[1];
  9.         $campo2 = $fila[2];
  10.         $campo3 = $fila[3];
  11.         $campo4 = $fila[4];
  12.         $campo5 = $fila[5];
  13.         $campo6 = $fila[6];
  14.  
  15.         # Realizar cálculos:
  16.        $campo7=$campo1+$campo2+$campo3+$campo4+$campo5+$campo6;
  17.  
  18.         $registros=mysql_query("update set campo7='$campo7'",$link) or
  19.           die("Problemas en el select:".mysql_error());
  20.     }
  21. $can--;
  22. }

Corregí errores del código inicial y puse una estructura más legible, ahora tengo 2 preguntas:
1.- Para que pones en el UPDATE el campo llave? (Eliminé el campo llave del UPDATE)
2.- Cual es la funcionalidad del if?

Si me ayudas a explicarlo lo voy a agradecer.
  #11 (permalink)  
Antiguo 13/07/2010, 23:24
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Cita:
Iniciado por johhan16 Ver Mensaje
Código PHP:
  <?
      $consulta 
mysql_query("SELECT llave, campo1, campo2, campo3, campo4, campo5, campo6 FROM tabla"$link) OR die ("No se pudo ejecutar la consulta");

      while (
$fila mysql_fetch_row($consulta)) {
      
$llave $fila[0];
      
$campo1 $fila[1];
      
$campo2 $fila[2];
      
$campo3 $fila[3];
      
$campo4 $fila[4];
      
$campo5 $fila[5];
      
$campo6 $fila[6];
      
# Realizar cálculos:
      
$campo7=$campo1+$campo2+$campo3+$campo4+$campo5+$campo6;

      
mysql_query("UPDATE tabla SET campo7='$campo7' where llave=$llave"$link
      } 
?>
yo estoy suponiendo que el que dice llave es un valor unico para cada fila
Gracias johhan16, este código lo veo ya sin el if y sin el campo llave, pero si el el WHERE, creo es por aqui, lo probaré.

Ajuste detalles que faltaban al codigo
  #12 (permalink)  
Antiguo 13/07/2010, 23:27
Avatar de elchicho118  
Fecha de Ingreso: mayo-2010
Mensajes: 74
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Cita:
Iniciado por Bier Ver Mensaje
Código PHP:
Ver original
  1. $consulta = mysql_query("SELECT llave, campo1, campo2, campo3, campo4, campo5, campo6 FROM tabla", $link) OR die ("No se pudo ejecutar la consulta");
  2.  
  3. $can= mysql_num_rows($consulta);
  4. while ($can>0){
  5.  
  6.     if ($row = mysql_fetch_array($consulta)) {
  7.         $llave = $fila[0];
  8.         $campo1 = $fila[1];
  9.         $campo2 = $fila[2];
  10.         $campo3 = $fila[3];
  11.         $campo4 = $fila[4];
  12.         $campo5 = $fila[5];
  13.         $campo6 = $fila[6];
  14.  
  15.         # Realizar cálculos:
  16.        $campo7=$campo1+$campo2+$campo3+$campo4+$campo5+$campo6;
  17.  
  18.         $registros=mysql_query("update set campo7='$campo7'",$link) or
  19.           die("Problemas en el select:".mysql_error());
  20.     }
  21. $can--;
  22. }

Corregí errores del código inicial y puse una estructura más legible, ahora tengo 2 preguntas:
1.- Para que pones en el UPDATE el campo llave? (Eliminé el campo llave del UPDATE)
2.- Cual es la funcionalidad del if?

Si me ayudas a explicarlo lo voy a agradecer.
donde va llave lo que va es tabla
lo que pasa es que estoy trabajando con algo parecido pero es tabla
  #13 (permalink)  
Antiguo 13/07/2010, 23:30
 
Fecha de Ingreso: junio-2010
Ubicación: Venezuela, Zulia
Mensajes: 686
Antigüedad: 13 años, 9 meses
Puntos: 55
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

pero sigo sin entenderte, que resultados exactamente te da el campo llave

y para que me preguntas por el if si aqui no tienes ninguno

el if es un condicional, osea en español seria

si (esto es correcto) entonces {
haces lo que quieras }
sino {
haces otra cosa }
  #14 (permalink)  
Antiguo 13/07/2010, 23:32
Avatar de Gustavo72  
Fecha de Ingreso: abril-2008
Ubicación: -32.956045,-60.661355
Mensajes: 197
Antigüedad: 16 años
Puntos: 9
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Si la operación que tienes que hacer con los campos no es muy compleja y MySQL te permite realizarlas, puedes hacer algo así:

Código PHP:
<?php
mysql_query
("UPDATE tabla SET Campo7=Campo1+Campo2+Campo3+Campo4+Campo5+Campo6"$link);
?>
Y resuelves todo en una linea.
__________________
Saludos.

Gustavo
  #15 (permalink)  
Antiguo 13/07/2010, 23:33
Avatar de elchicho118  
Fecha de Ingreso: mayo-2010
Mensajes: 74
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

pruebalo de esta forma
Código PHP:
Ver original
  1. $consulta = mysql_query("SELECT llave, campo1, campo2 FROM tabla", $link) OR die ("No se pudo ejecutar la consulta");
  2.  
  3.  while ($row = mysql_fetch_array($consulta)) {
  4. $llave = $fila[0];
  5. $campo1 = $fila[1];
  6. $campo2 = $fila[2];
  7. $campo3 = $fila[2];
  8. $campo4 = $fila[2];
  9. $campo5 = $fila[2];
  10. $campo6 = $fila[2];
  11.  
  12. # Realizar cálculos:
  13. $campo7=$campo1+$campo2+$campo3+$campo4+$campo5+$c ampo6
  14.  
  15. $registros=mysql_query("update tabla set campo7='$campo7'",$link) or
  16.   die("Problemas en el select:".mysql_error());
  17. }
  #16 (permalink)  
Antiguo 13/07/2010, 23:36
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Cita:
Iniciado por Gustavo72 Ver Mensaje
Las últimas dos respuestas son correctas. No obstante, si la operación que tienes que hacer con los campos no es muy compleja y MySQL te permite realizarlas, puedes hacer algo así:

Código PHP:
<?php
mysql_query
("UPDATE tabla SET Campo7=Campo1+Campo2+Campo3+Campo4+Campo5+Campo6"$link);
?>
Y resuelves todo en una linea.
Gracias Gustavo, desafortunadamente debo hacer muchos cálculos muy especiales, no es posible hacerlo con mySQL, por ello dike al inicio que como "ejemplo" deseaba sumar estos campos. De por si me fue complicado explicarme, más lo sería explicar lo que debo hacer de cálculos, que son mucho muy complejos e involucran otras tablas.

Gracias por el comentario.
  #17 (permalink)  
Antiguo 13/07/2010, 23:42
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Gracias a todos, probaré lo que dices elchicho118.

Deseo hacer una consulta.

Al estar dentro del while imagino que el "apuntador se encuentra posicionado en la fila correspondiente, entonces puedo hacer operaciones y utilizar UPDATE, el cual será realizado en la fila que me encuentro.

Al llegar al final del while, el apuntador brinca a la fila siguiente, y vuelvo a hacer operaciones y hacer UPDATE.

Así sucesivamente hasta recorrer todas las tablas

¿es correcta mi apreciación?
  #18 (permalink)  
Antiguo 13/07/2010, 23:46
Avatar de Gustavo72  
Fecha de Ingreso: abril-2008
Ubicación: -32.956045,-60.661355
Mensajes: 197
Antigüedad: 16 años
Puntos: 9
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

NO ES CORRECTO COMO DICES!!!

Lo correcto es hacerlo como dijo johhan16:

Código PHP:
<?
      $consulta 
mysql_query("SELECT llave, campo1, campo2, campo3, campo4, campo5, campo6 FROM tabla"$link) OR die ("No se pudo ejecutar la consulta");

      while (
$fila mysql_fetch_row($consulta)) {
      
$llave $fila[0];
      
$campo1 $fila[1];
      
$campo2 $fila[2];
      
$campo3 $fila[3];
      
$campo4 $fila[4];
      
$campo5 $fila[5];
      
$campo6 $fila[6];
      
# Realizar cálculos:
      
$campo7=$campo1+$campo2+$campo3+$campo4+$campo5+$campo6;

      
mysql_query("UPDATE tabla SET campo7='$campo7' where llave=$llave"$link
      } 
?>
Utilizas la llave para apuntar al registro (se supone que llave es el identificador del registro)
__________________
Saludos.

Gustavo
  #19 (permalink)  
Antiguo 13/07/2010, 23:56
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Cita:
Iniciado por Gustavo72 Ver Mensaje
NO ES CORRECTO COMO DICES!!!

Lo correcto es hacerlo como dijo johhan16:

Código PHP:
<?
      $consulta 
mysql_query("SELECT llave, campo1, campo2, campo3, campo4, campo5, campo6 FROM tabla"$link) OR die ("No se pudo ejecutar la consulta");

      while (
$fila mysql_fetch_row($consulta)) {
      
$llave $fila[0];
      
$campo1 $fila[1];
      
$campo2 $fila[2];
      
$campo3 $fila[3];
      
$campo4 $fila[4];
      
$campo5 $fila[5];
      
$campo6 $fila[6];
      
# Realizar cálculos:
      
$campo7=$campo1+$campo2+$campo3+$campo4+$campo5+$campo6;

      
mysql_query("UPDATE tabla SET campo7='$campo7' where llave=$llave"$link
      } 
?>
Utilizas la llave para apuntar al registro (se supone que llave es el identificador del registro)
Gracia Gustavo72,

Ajustando mi apreciación:

1.- Al estar en el WHILE el apuntador se posiciona el la fila 1
2.- Al hacer UPDATE con el campo llave se almacena en la fila correspondiente, que para este caso en particular el la misma fila.
3.- El apuntador se mantiene en la fila 1 y al llegar completar el primer ciclo pasa a la fila 2.

Otra pregunta:
*.- ¿Que pasa si en en vez de almacenar en el campo llave, almaceno en el campo llave2?

¿El WHILE mantiene al apuntador en la fila correspondiente que se encontraba antes de realizar el UPDATE?

Gracias por ayudarme a comprenderlo
  #20 (permalink)  
Antiguo 14/07/2010, 00:06
Avatar de Gustavo72  
Fecha de Ingreso: abril-2008
Ubicación: -32.956045,-60.661355
Mensajes: 197
Antigüedad: 16 años
Puntos: 9
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

MySQL te entrega los resultados que tu recorres con el while, pero no queda parado en ningún lugar como pasa con el recordset de Access por ejemplo.

O sea que tu con el update puedes escribir en cualquier registro siempre y cuando lo identifiques con WHERE, de hecho puedes escribir en muchos registros a la vez si varios cumplen la condición. Y si no le pones el WHERE vas a escribir en el Campo7 de todos los registros el mismo valor.

Espero se haya entendido, sino vuelve a preguntar.
__________________
Saludos.

Gustavo
  #21 (permalink)  
Antiguo 14/07/2010, 00:13
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Cita:
Iniciado por Gustavo72 Ver Mensaje
MySQL te entrega los resultados que tu recorres con el while, pero no queda parado en ningún lugar como pasa con el recordset de Access por ejemplo.

O sea que tu con el update puedes escribir en cualquier registro siempre y cuando lo identifiques con WHERE, de hecho puedes escribir en muchos registros a la vez si varios cumplen la condición. Y si no le pones el WHERE vas a escribir en el Campo7 de todos los registros el mismo valor.

Espero se haya entendido, sino vuelve a preguntar.
Total y claramente entendido, Muchas Gracias. Ahora solo tengo la siguiente duda:

1.- ¿Porqué después del hacer, en el ejemplo anterior, el UPDATE, no se hace nada por reapuntarse hacia el registro en el se encontraba posicionado al inicio del WHILE?

2.- Imaginemos que en el UPDATE no se incluya el WHERE, entonces cambiaría el valor del CAMPO7 a todas las filas de la tabla, entonces mi pregunta es: ¿En cual fila quedaría apuntado el WHILE?
  #22 (permalink)  
Antiguo 14/07/2010, 00:21
Avatar de Gustavo72  
Fecha de Ingreso: abril-2008
Ubicación: -32.956045,-60.661355
Mensajes: 197
Antigüedad: 16 años
Puntos: 9
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

El while recorre el resultado de tu consulta, registro por registro independientemente de lo que hagas con el UPDATE o cualquier otra consulta MySQL. O sea que si ya leiste el registro de la posición 1, el próximo que leerá será el de la posición 2 y luego la 3.

Lo que también es bueno saber y hay que tener en cuenta, es que si el while te entregó el registro 1 y tu escribes campos del registro 2, cuando el while te entregue los datos del registro 2 estos serán los viejos sin estas últimas modificaciones.
__________________
Saludos.

Gustavo
  #23 (permalink)  
Antiguo 14/07/2010, 00:31
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Cita:
Iniciado por Gustavo72 Ver Mensaje
El while recorre el resultado de tu consulta, registro por registro independientemente de lo que hagas con el UPDATE o cualquier otra consulta MySQL. O sea que si ya leiste el registro de la posición 1, el próximo que leerá será el de la posición 2 y luego la 3.

Lo que también es bueno saber y hay que tener en cuenta, es que si el while te entregó el registro 1 y tu escribes campos del registro 2, cuando el while te entregue los datos del registro 2 estos serán los viejos sin estas últimas modificaciones.
Gracias Gustavo, has explicado y aclarado todas las dudas que tenía, muy agradecido.

Respecto a lo que comentas: Debo leer el registro 1 y afectar a varios registros, digamos que el 2, 30, 500 y 20,000.

Cuando me posicione al registro 2 ¿obtendré los datos que tenía antes de afectarlos?

Deseo obtener los nuevos datos que previamente almacené, ya que con los nuevos datos debo hacer otros nuevos cálculos y afectar a las filas 6, 230, 860, y 28,000. ¿que se debe hacer para resolver este caso?

Gracias
  #24 (permalink)  
Antiguo 14/07/2010, 00:43
Avatar de Gustavo72  
Fecha de Ingreso: abril-2008
Ubicación: -32.956045,-60.661355
Mensajes: 197
Antigüedad: 16 años
Puntos: 9
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Lo que necesitas sería algo así:

Código PHP:
<?php
$consulta
=mysql_query("SELECT llave FROM tabla ORDER BY llave");
while (
$fila mysql_fetch_row($consulta)) {
     
$consulta2=mysql_query("SELECT llave, Campo1, Campo2, etc FROM tabla WHERE llave=".$fila[0]);
     if (
$fila2=mysql_fetch_row($consulta2)) {
         
$llave=$fila2[0];
         
$campo1=$fila2[1];
         
$campo2=$fila2[2];
         
//etc

         //Aquí tus cálculos:
         //...
         
         
mysql_query("UPDATE tabla SET Campo7='$resultado1' WHERE llave=$llave");
         
mysql_query("UPDATE tabla SET Campo7='$resultado2' WHERE llave=$llave2");
         
mysql_query("UPDATE tabla SET Campo7='$resultado3' WHERE llave=$llave3");
     }
     
mysql_free_result($consulta2);
}
mysql_free_result($consulta);
?>
__________________
Saludos.

Gustavo
  #25 (permalink)  
Antiguo 14/07/2010, 00:56
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Cita:
Iniciado por Gustavo72 Ver Mensaje
Lo que necesitas sería algo así:

Código PHP:
<?php
$consulta
=mysql_query("SELECT llave FROM tabla ORDER BY llave");
while (
$fila mysql_fetch_row($consulta)) {
     
$consulta2=mysql_query("SELECT llave, Campo1, Campo2, etc FROM tabla WHERE llave=".$fila[0]);
     if (
$fila2=mysql_fetch_row($consulta2)) {
         
$llave=$fila2[0];
         
$campo1=$fila2[1];
         
$campo2=$fila2[2];
         
//etc

         //Aquí tus cálculos:
         //...
         
         
mysql_query("UPDATE tabla SET Campo7='$resultado1' WHERE llave=$llave");
         
mysql_query("UPDATE tabla SET Campo7='$resultado2' WHERE llave=$llave2");
         
mysql_query("UPDATE tabla SET Campo7='$resultado3' WHERE llave=$llave3");
     }
     
mysql_free_result($consulta2);
}
mysql_free_result($consulta);
?>
Gracias Gustavo, no me refería a eso, sino a lo que dices:

Lo que también es bueno saber y hay que tener en cuenta, es que si el while te entregó el registro 1 y tu escribes campos del registro 2, cuando el while te entregue los datos del registro 2 estos serán los viejos sin estas últimas modificaciones.

Al pasar por el registro 1 haré cálculos y los almacenaré el el registro 2, pero deseo que cuando el WHILE me entregue los datos almacenados en el registro 2, me entregue los datos que previamente ya he almacenado, no deseo que me entregue los datos anteriores. ¿que debo hacer para recibir los nuevos datos almacenados?

Me parece increible que me entregue datos anteriores, máxime si mi tabla es de miles de registros, ¿acaso los almacena en RAM?

Gracias
  #26 (permalink)  
Antiguo 14/07/2010, 01:04
Avatar de Gustavo72  
Fecha de Ingreso: abril-2008
Ubicación: -32.956045,-60.661355
Mensajes: 197
Antigüedad: 16 años
Puntos: 9
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Si, los almacena en tablas temporales ya sea en RAM o en el mismo disco rígido.

Y sí, mi respuesta contempla eso que dijiste. Fijate que la primer consulta solo toma las llaves de los registros y los recorre con el while de principio al fin y en la consulta de adentro lee los registros uno por uno con todos los campos que necesitas en el momento de hacer los cálculos.

No es muy eficiente porque hace una consulta por cada registro pero bueno, creo que tu necesidad lo requiere.
__________________
Saludos.

Gustavo
  #27 (permalink)  
Antiguo 14/07/2010, 01:16
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 2 meses
Puntos: 21
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Cita:
Iniciado por Gustavo72 Ver Mensaje
Si, los almacena en tablas temporales ya sea en RAM o en el mismo disco rígido.

Y sí, mi respuesta contempla eso que dijiste. Fijate que la primer consulta solo toma las llaves de los registros y los recorre con el while de principio al fin y en la consulta de adentro lee los registros uno por uno con todos los campos que necesitas en el momento de hacer los cálculos.

No es muy eficiente porque hace una consulta por cada registro pero bueno, creo que tu necesidad lo requiere.
¿Y cuando "suelta" la tabla temporal para almacenar a la tabla definitiva? ¿Al finalizar el PHP?
¿Acaso no hay algo así como "flush" para forzar almacenar inmediatamente a la tabla?
¿Y si son varios los usuarios que están afectando la tabla? ¿el segundo usuario verá datos anteriores si es que no los ha "soltado el usuario 1?

¿Que material debo leer para documentarme al respecto?

Gracias nuevamente
  #28 (permalink)  
Antiguo 14/07/2010, 01:44
Avatar de Gustavo72  
Fecha de Ingreso: abril-2008
Ubicación: -32.956045,-60.661355
Mensajes: 197
Antigüedad: 16 años
Puntos: 9
Respuesta: Leer campos de MySQL, Realizar cálculos, Almacenar el resultado

Voy a explicar nuevamente con una metáfora:

Supongamos que la tabla es un paisaje, cuando haces una consulta es como sacar una foto.
Si luego tu u otro usuario hacen modificaciones en la tabla, estás modificando el paisaje, no la foto.
Y tú que aún tienes la foto en la mano (y la estás recorriendo con el while) estarás viendo la versión anterior).
Es decir que para ver los cambios tienes que volver a sacar la foto (realizar una nueva consulta).

Cita:
Iniciado por Bier Ver Mensaje
¿Y cuando "suelta" la tabla temporal para almacenar a la tabla definitiva? ¿Al finalizar el PHP?
La tabla temporal la elimina cuando haces el mysql_free_result o bien cuando termina el script PHP pero no es que la tabla quede bloqueada para otros usuarios o para tu mismo.

Cita:
Iniciado por Bier Ver Mensaje
¿Acaso no hay algo así como "flush" para forzar almacenar inmediatamente a la tabla?
Los cambios (UPDATE), los nuevos registros (INSERT) o los borrados (DELETE) se graban a la tabla real en el momento.

Cita:
Iniciado por Bier Ver Mensaje
¿Y si son varios los usuarios que están afectando la tabla? ¿el segundo usuario verá datos anteriores si es que no los ha "soltado el usuario 1?
Lo que pasa es que al hacer una consulta SELECT es como sacar una foto, la tabla o los registros no quedan "tomados". Cada usuario al hacer una consulta estará viendo la tabla tal como está en el momento de hacer la consulta.

Cita:
Iniciado por Bier Ver Mensaje
¿Que material debo leer para documentarme al respecto?
Sí, en realidad es mejor que leas la documentación para ver más en detalle como funciona, además hay varios tipos de tablas, MyISSAM, ImnoDB son las más usadas y se comportan de maneras diferentes:

http://dev.mysql.com/doc/refman/5.0/es/index.html
__________________
Saludos.

Gustavo

Etiquetas: almacenar, campos, mysql, realizar, resultados
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 21:43.