Foros del Web » Programando para Internet » PHP »

¿Como saber el numero de registros de una base de datos?

Estas en el tema de ¿Como saber el numero de registros de una base de datos? en el foro de PHP en Foros del Web. Editado Editado...
  #1 (permalink)  
Antiguo 30/10/2006, 03:49
 
Fecha de Ingreso: marzo-2006
Mensajes: 342
Antigüedad: 18 años, 1 mes
Puntos: 0
¿Como saber el numero de registros de una base de datos?

Editado Editado

Última edición por Saludos; 02/07/2007 a las 17:04
  #2 (permalink)  
Antiguo 30/10/2006, 06:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La forma más rápida sería usar SQL y su sentencia COUNT()

Código PHP:
$result mysql_query("SELECT COUNT(*) FROM archivos"$connect);
$numero_registros mysql_result($result,0);
echo 
"Total: ".$numero_registros

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 30/10/2006, 07:53
 
Fecha de Ingreso: julio-2005
Mensajes: 220
Antigüedad: 18 años, 8 meses
Puntos: 0
Cita:
Iniciado por Cluster Ver Mensaje
La forma más rápida sería usar SQL y su sentencia COUNT()
Puede ser la manera más óptima, pero usando count no obtienes los datos del resto de los campos. Por tanto, según que necesites, habría que usar COUNT o mysql_num_rows.

Saludos!!
  #4 (permalink)  
Antiguo 30/10/2006, 08:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
mm .. Pero si que puedes obtener el resto de campos:

Código PHP:
$result mysql_query("SELECT COUNT(*) AS total,otro_campo,uno_mas FROM archivos"$connect); 
(Y luego tu mysql_fetch_xxx() como gustes).

En "total" tendrías el total (hice un alias con AS ..) .. (eso sí .. repetido en la misma "columna" de resultados) .. y luego el resto de campos que quieras hacer referencia ..

No he hecho pruebas de rendimiento .. pero COUNT() lo hace el motor de BBDD .. mientras que mysql_num_rows() es PHP el que espera a tener el resultado para "contar" lo que recibió .. En los casos que necesitemos los datos y el total es recomendable usar mysql_num_rows() .. así no ejecutamos otra consulta SQL.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 30/10/2006, 08:21
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
Existe una manera mas "óptima" se saber el total de un query y consiste de usar SQL_CALC_FOUND_ROWS y FOUND_ROWS, esto según el manual de mysql y pruebas que he hecho.
La manera sería:
Código PHP:
$sql "SELECT SQL_CALC_FOUND_ROWS
 codigo, nombre 
 FROM usuarios"
;
$r mysql_query($sql ); #Resourse al query
#Para el total haces:
$rTotal mysql_query("select found_rows()");
$rsTotal mysql_fetch_row($rTotal);
$total $rsTotal[0];
mysql_free_result($rTotal); 
PD: Tené en cuenta que SQL_CALC_FOUND_ROWS y FOUND_ROWS() están disponibles desde MySQL 4.x.x >.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #6 (permalink)  
Antiguo 30/10/2006, 08:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por nicolaspar Ver Mensaje
Existe una manera mas "óptima" se saber el total de un query y consiste de usar SQL_CALC_FOUND_ROWS y FOUND_ROWS, esto según el manual de mysql y pruebas que he hecho.
La manera sería:
Código PHP:
$sql "SELECT SQL_CALC_FOUND_ROWS
 codigo, nombre 
 FROM usuarios"
;
$r mysql_query($sql ); #Resourse al query
#Para el total haces:
$rTotal mysql_query("select found_rows()");
$rsTotal mysql_fetch_row($rTotal);
$total $rsTotal[0];
mysql_free_result($rTotal); 
PD: Tené en cuenta que SQL_CALC_FOUND_ROWS y FOUND_ROWS() están disponibles desde MySQL 4.x.x >.
No conocía esas funciones SQL (gracias) .. Será mucho la diferencia en rendimiento COUNT() vs las funciones que describes SQL o sólo mysql_num_rows() .. Sería cosa de medir esos tiempos .. así que cada uno saque conclusiones.

También como comentas hay que tener cuidado con que versión de Mysql se pretende aplicar .. pues no todas disponen de esas funciones SQL.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 30/10/2006, 09:06
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
Si, están buenas (de nada ), y hay diferencia, pero como bien sabes, esa diferencia se siente cuando la db es grande...hacerle pruebas con menos de 10.000 registros puede hasta ser igual o variar según lo que este procesando en ese momento el server. Yo cuando lo probé use tres tablas joinneadas (unos 700.000 registros en total), y la diferencia se notaba.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #8 (permalink)  
Antiguo 30/10/2006, 09:25
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por nicolaspar Ver Mensaje
Si, están buenas (de nada ), y hay diferencia, pero como bien sabes, esa diferencia se siente cuando la db es grande...hacerle pruebas con menos de 10.000 registros puede hasta ser igual o variar según lo que este procesando en ese momento el server. Yo cuando lo probé use tres tablas joinneadas (unos 700.000 registros en total), y la diferencia se notaba.
Ok, tomo nota .. yo hasta la fecha por "compatiblidad (de versión de Mysql)" Siempre usé COUNT() (que dá bastante mejor resultado que mysql_num_rows()).

Aunque también hay que tener claro que mysql_num_rows() cuenta sobre el resultado .. así que en muchos casos que se espera "1 o 0" resultados y lo que se pueda obtener se va a usar (se va acceder al resultado) .. ahí tal vez no valga la pena liarse con "COUNT()" ni más SQL como el que presentas.

En definitiva, .. cada caso hay que evaluarlo. Lo importante (y bonito xD) es que hay alternativas y más o menos está comentado para que casos usar unas u otras opciones.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 31/10/2006, 07:33
 
Fecha de Ingreso: marzo-2006
Mensajes: 342
Antigüedad: 18 años, 1 mes
Puntos: 0
Editado Editado

Última edición por Saludos; 02/07/2007 a las 17:04
  #10 (permalink)  
Antiguo 31/10/2006, 08:05
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
El tema del count(*) es que en un paginado (donde mas se aplica) no sirve, ya que te dará el número de registros en la pagina y no el total de registros en la tabla. Y el SQL_CALC_FOUND_ROWS no, cuenta todo sacando el limit, por lo que resulta una alternativa a solo el mysql_num_rows, o bien a un count independiente de esa consulta.

Eso yo no lo aclare en el ejemplo y es una cualidad muy interesante, nuevamente, con el limit sería así:

Código PHP:
$sql "SELECT SQL_CALC_FOUND_ROWS
 codigo, nombre 
 FROM usuarios limit 10"
;
$r mysql_query($sql ); #Resourse al query, solo 10 registros de, supongamos 333 en total
#Para el total haces:
$rTotal mysql_query("select found_rows()");
$rsTotal mysql_fetch_row($rTotal);
$total $rsTotal[0]; #Aca tendremos 333 aún teniendo el limit aplicado a la consulta.
mysql_free_result($rTotal); 
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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 23:43.