Foros del Web » Programando para Internet » PHP »

Reutilizacion de un result

Estas en el tema de Reutilizacion de un result en el foro de PHP en Foros del Web. Hola, queria saber si es posible reutilizar un result, tengo lo siguiente: <?php // me conecto a la BBDD y defino las qry's necesarias $result_1 ...
  #1 (permalink)  
Antiguo 30/05/2005, 09:33
Avatar de gpardo  
Fecha de Ingreso: octubre-2004
Ubicación: Centenario, NQN
Mensajes: 40
Antigüedad: 19 años, 6 meses
Puntos: 0
Reutilizacion de un result

Hola,
queria saber si es posible reutilizar un result, tengo lo siguiente:

<?php
// me conecto a la BBDD y defino las qry's necesarias

$result_1 = mysql_query($qry_1, $conexion );
while ($rw_1 = mysql_fetch_object($result_1)) {
// operaciones varias
}

$result_2 = mysql_query($qry_2, $conexion );
while ($rw_2 = mysql_fetch_object($result_2)) {
// operaciones varias
}

// aqui me interesa volver a utilizar el $result_1 sin ejecutar nuevamente la consulta
// a la BBDD, es posible?, como?

?>


saludos.
__________________
Gustavo Pardo
http://dataneu.com/
  #2 (permalink)  
Antiguo 30/05/2005, 09:55
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Se me ocurre usar mysql_field_seek, pero no le encuentro utilidad en este caso.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 30/05/2005, 10:14
Avatar de gpardo  
Fecha de Ingreso: octubre-2004
Ubicación: Centenario, NQN
Mensajes: 40
Antigüedad: 19 años, 6 meses
Puntos: 0
a ver si puedo clarificar un poco, si el result fuera del tipo array haria algo como:

reset($result_1);
// y ya estaria en condiciones de generar un nuevo bucle while desde
// el primer elemento

pero no es el caso, ya que $result_1 es un tipo resource, no es una matriz, por lo que no puedo usar reset().

una solucion podria ser rellenar una matriz en el primer while, para reutilizarla mas tarde, pero dudo si convenga teniendo en cuenta el tamanio del resultado de la consulta que es desconocido y puede ser bastante grande.
__________________
Gustavo Pardo
http://dataneu.com/
  #4 (permalink)  
Antiguo 30/05/2005, 10:32
Avatar de gpardo  
Fecha de Ingreso: octubre-2004
Ubicación: Centenario, NQN
Mensajes: 40
Antigüedad: 19 años, 6 meses
Puntos: 0
bien, creo que aqui esta la respuesta:

mysql_data_seek ( $result_1, 0 ); // como para arrancar desde la fila 0

saludos.

__________________
Gustavo Pardo
http://dataneu.com/
  #5 (permalink)  
Antiguo 30/05/2005, 13:08
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Claro, tendrías que considerar la posibilidad de que en la primera lectura del resultset, puedas guardarlo en un array.
De esa manera, si vas a leerlo otra vez, simplemente tomas los datos del array y ya no a la base de datos (mysql_fetch_array()).

Lo ideal seria que a cada lectura de una fila le "saques el jugo" para evitar leerla varias veces.

Saludos
  #6 (permalink)  
Antiguo 30/05/2005, 13:17
Avatar de gpardo  
Fecha de Ingreso: octubre-2004
Ubicación: Centenario, NQN
Mensajes: 40
Antigüedad: 19 años, 6 meses
Puntos: 0
ok, jpinedo,
pero donde se almacena el array? en la ram?
si es asi que pasa en el caso de que el resultset sea muy grande? me "como" toda la ram con ese array?
__________________
Gustavo Pardo
http://dataneu.com/
  #7 (permalink)  
Antiguo 30/05/2005, 13:25
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
jajajaja...
Justamente por eso escribí en condicional y también puse "considerar la posibilidad".
Eso hay que considerarlo según tu caso específico. Porque después de leer el resultset podrías cerrar la conexión a la BD y eso te ayudaría con la concurrencia.
Depende de la máquina donde tengas el servidor web y la máquina donde esté la base de datos.

Si el resultest es demasiado grande, siempre viene bien considerar alguna técnica de paginación.

De todas maneras lo que apuntas es algo a tener muy en cuenta en la optimización de los códigos.

Saludos
  #8 (permalink)  
Antiguo 30/05/2005, 13:48
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Depende. Igual, usa MYSQL_ASSOC o _NUM como segunda opcion, eso te lo achicara si es muy grande.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #9 (permalink)  
Antiguo 30/05/2005, 13:57
Avatar de gpardo  
Fecha de Ingreso: octubre-2004
Ubicación: Centenario, NQN
Mensajes: 40
Antigüedad: 19 años, 6 meses
Puntos: 0
el punto es que no puedo paginar porque se trata de un informe, es decir, necesito toda la info de un solo viaje, por otro lado, necesito mantener toda la info que voy generando, sin 'tirarla', ya que necesito poner arriba de todo una calificacion que depende de los resultados inferiores... algo asi como aprobado/desaprobado, pero esto depende de todo lo que se lista mas abajo, pero el cliente quiere esa calificacion al comienzo del informe, no al final

en sintesis, tengo que generar todo el listado para, al final, poner la calificacion al comienzo
__________________
Gustavo Pardo
http://dataneu.com/
  #10 (permalink)  
Antiguo 30/05/2005, 15:09
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Cita:
Iniciado por gpardo
(...)necesito poner arriba de todo una calificacion que depende de los resultados inferiores... algo asi como aprobado/desaprobado, pero esto depende de todo lo que se lista mas abajo(...)
Un par de opciones:
- Si se puede, procesa esa información directamente en el SQL. En este caso harías una consulta más pero te ahorra tiempo de procesamiento en el PHP (Aunque cargue un poco más a la BD, suele ser más eficiente).
- No envíes a imprimir nada hasta el final. Haces el procesamiento primero y luego mandas a imprimir con "echo" (o lo que utilices). O sea, en cada registro que leas con mysql_fetch_array (o similar), procesa todo lo que haya que procesar. Lo que deba imprimirse lo guardas en una variable $salida. Cuando termine la lectura de todos los registros haces el procesamiento necesario para determinar si está aprobado/desaprobado. Luego imprimes todo en el orden que necesites.

La idea es no tener que recorrer todo el resultset nuevamente... sobretodo si es tan extenso.

Saludos
  #11 (permalink)  
Antiguo 30/05/2005, 15:14
Avatar de gpardo  
Fecha de Ingreso: octubre-2004
Ubicación: Centenario, NQN
Mensajes: 40
Antigüedad: 19 años, 6 meses
Puntos: 0
gracias jpinedo,

Cita:
Aunque cargue un poco más a la BD, suele ser más eficiente
creo que aqui esta la clave de que es lo que mas conviene.

abrazos.
__________________
Gustavo Pardo
http://dataneu.com/
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 03:47.