Foros del Web » Programando para Internet » PHP »

Cómo saber si estamos en el último registro

Estas en el tema de Cómo saber si estamos en el último registro en el foro de PHP en Foros del Web. Hola, tengo un select a una base de datos que recorro con un while. Imaginemos que tengo que recorrer 50 registros y hacer algo con ...
  #1 (permalink)  
Antiguo 01/04/2012, 08:19
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Cómo saber si estamos en el último registro

Hola, tengo un select a una base de datos que recorro con un while.

Imaginemos que tengo que recorrer 50 registros y hacer algo con cada uno de ellos. Lo que quisiera saber es cómo hago para saber si estoy en el último registro, porque con ese último quiero hacer algo diferente.

Podría hacer un count y luego una variable que se vaya incrementando en 1 y comparar con el número de registros del count pero me imagino que en php habrá alguna función para evitarme el count y que se ralentice las consulta a la base de datos.

Gracias.
  #2 (permalink)  
Antiguo 01/04/2012, 08:23
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Cómo saber si estamos en el último registro

yo lo podria hacer de esta forma
quizas exista otra mejor pero esta resuelve.
Código PHP:
Ver original
  1. $contador = 0;
  2.     $cantidad_row = mysql_num_rows($consulta);
  3.     while( $row = mysql_fetch_object($consulta) ){
  4.        
  5.        
  6.         if($contador == $cantidad_row){
  7.        
  8.              // do something
  9.            
  10.         }
  11.    
  12.    
  13.         $contador++;
  14.  
  15.     }
  #3 (permalink)  
Antiguo 01/04/2012, 09:06
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Cómo saber si estamos en el último registro

Cuando recorres un recordset con un while, en la última iteración la variable $row (o la que uses) contendrá el último registro, con lo que no te hace falta hacer nada especial, una vez hayas salido del while, haces lo que tengas que hacer con los datos del recordset que tienes en la variable $row.
  #4 (permalink)  
Antiguo 01/04/2012, 09:12
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Cómo saber si estamos en el último registro

Tenes razon DooBie
  #5 (permalink)  
Antiguo 01/04/2012, 09:50
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Respuesta: Cómo saber si estamos en el último registro

Necesito saberlo dentro del while porque es ahí donde hago algo con cada registro y si es el último quiero hacer algo diferente.
  #6 (permalink)  
Antiguo 01/04/2012, 10:32
Avatar de charlyalegret  
Fecha de Ingreso: septiembre-2011
Ubicación: Barcelona
Mensajes: 705
Antigüedad: 12 años, 6 meses
Puntos: 140
Respuesta: Cómo saber si estamos en el último registro

Una alternativa a lo propuesto por gjx2 y que tu comentas al inicio, para evitar tener el if en cada ciclo del while y minimizar el tiempo (que si no es una consulta muy extensa, dudo que sea significativo), podría ser:


Código PHP:
Ver original
  1. $cantidad_row = mysql_num_rows($consulta);
  2.         for ($i = 1; $i < $cantidad_row; $i++) {
  3.               $row = mysql_fetch_object($consulta)
  4.                // do something
  5.                }

De esta manera, hará todas las iteraciones menos 1, y acabado el ciclo, si vuelves a hacer

Código PHP:
Ver original
  1. $row = mysql_fetch_object($consulta)

en principio deberías estar en el último resultado de la consulta.

Creo, porque no lo he probado!

Saludos
  #7 (permalink)  
Antiguo 01/04/2012, 13:12
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Cómo saber si estamos en el último registro

Cita:
Iniciado por DooBie Ver Mensaje
Cuando recorres un recordset con un while, en la última iteración la variable $row (o la que uses) contendrá el último registro, con lo que no te hace falta hacer nada especial, una vez hayas salido del while, haces lo que tengas que hacer con los datos del recordset que tienes en la variable $row.
No, porque en la última iteración del ciclo ya recorriste todo el juego de resultados y mysql_fetch_obect() devolverá false y es el valor que tendrá asignado $row
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 01/04/2012, 22:41
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Cómo saber si estamos en el último registro

Lo que quizo decir DooBie es que

Código PHP:
Ver original
  1. while($field = mysql_fetch_object($consulta) ){
  2.     $row = $field->username;
  3. }
  4. # $row aqui contiene el ultimo registro de la consulta.
  5. echo $row;
  #9 (permalink)  
Antiguo 02/04/2012, 00:37
Avatar de Chico3001  
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico, DF
Mensajes: 112
Antigüedad: 12 años, 7 meses
Puntos: 12
Respuesta: Cómo saber si estamos en el último registro

Por que no usar un DO WHILE?

DO {

acciones ....

} WHILE ($registros < $numregistros);

accion final...
  #10 (permalink)  
Antiguo 02/04/2012, 07:26
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Cómo saber si estamos en el último registro

Cita:
Iniciado por gjx2 Ver Mensaje
Lo que quizo decir DooBie es que

Código PHP:
Ver original
  1. while($field = mysql_fetch_object($consulta) ){
  2.     $row = $field->username;
  3. }
  4. # $row aqui contiene el ultimo registro de la consulta.
  5. echo $row;
Exacto. Pero no le sirve. Quizá con el do...while pueda conseguirlo.

Etiquetas: registro, variables
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 15:46.