2010-05-26 18 views
6

Si necesito saber el número total de filas en una tabla de base de datos que hacer algo como esto:¿Forma más rápida de conocer el número total de filas en la base de datos MySQL?

$query = "SELECT * FROM tablename WHERE link='1';"; 
$result = mysql_query($query); 
$count = mysql_num_rows($result); 

Actualizado: he cometido un error, de arriba es mi camino real. Pido disculpas a todos

Para que vea la cantidad total de datos que se recuperan escaneando a través de toda la base de datos.

¿Hay una manera mejor?

+1

Técnicamente , la llamada al recuento ($ rows) está contando las filas en la matriz $ rows en PHP-land, no escaneando la base de datos en database-land. –

+2

Si bien su método no es óptimo, también es incorrecto. Obtendrá el número de campos, no filas. Multiplicado por 2. –

+2

¿Deseas el enlace = '1'? Si * todos * sus registros en esa tabla tienen link = '1', obtendrá un recuento de todos los registros en esa tabla usando los ejemplos a continuación, pero ese no es el caso. Si realmente quieres obtener todos los registros, eliminaría el enlace = '1'. –

Respuesta

18
$query = "SELECT COUNT(*) FROM tablename WHERE link = '1'"; 
$result = mysql_query($query); 
$count = mysql_result($result, 0);

Esto significa que no está transfiriendo todos sus datos entre la base de datos y PHP, que es obviamente una enorme pérdida de tiempo y recursos.

Por lo que vale, su código no contaría el número de filas, le daría 2 veces el número de columnas, ya que está contando el número de elementos en una matriz que representa una sola fila (y mysql_fetch_array le da dos entradas de la matriz por columna - uno numérico y uno para el nombre de la columna)

+0

He actualizado mi pregunta. Consulte – Starx

+1

@Starx La respuesta sigue siendo la misma :) – Chris

10
SELECT COUNT(*) FROM tablename WHERE link='1'; 
+0

Por supuesto que reemplazaría * con uno de los nombres de columna – Pedro

+0

@Pedro - podría no hacer tanta diferencia. – ChrisF

+3

@Pedro et al, no debe usar un nombre de columna.Eso no cuenta valores NULOS en esa columna. Algunas personas sugieren utilizar el recuento (1) porque es más rápido, pero eso es basura en todo menos en el DBMS con muerte cerebral. – paxdiablo

4

usted podría hacer:

SELECT count(*) FROM tablename; 

para su búsqueda. El resultado será una sola columna que contiene el número de filas.

+0

He actualizado mi pregunta. Por favor, consulte – Starx

3

Si necesito saber el número total de filas en una tabla de base de datos

Tal vez' Me falta algo aquí, pero si solo quiere obtener el número total de filas en una tabla, no necesita una condición WHERE. Haga esto:

SELECT COUNT(*) FROM tablename 

Con la condición WHERE solo contará el número de filas que cumplen esta condición.

+0

+1 - nota útil sobre la condición WHERE. –

+0

He actualizado mi pregunta. Por favor, consulte – Starx

0
+0

-1 Mala idea. Esto requiere que ejecutes la consulta completa. Un 'SELECT count (*)' es el mundo más eficiente. – Kenaniah

+1

@Kenaniah: no es necesariamente una mala idea. Si todo lo que el OP está buscando es el número de filas, entonces sí, es una mala idea. Sin embargo, si el OP necesita los datos en otras manipulaciones, entonces 'mysql_num_rows()' podría ser más adecuado. – Joseph

+0

@Joseph, acordado para otros contextos. Pero en el contexto de * esta * pregunta, es una mala idea. – Kenaniah

0

Si va a utilizar la siguiente instrucción SQL:

SELECT COUNT(*) FROM tablename WHERE link='1'; 

Asegúrese de que tiene un índice en la columna 'enlace'

+0

He actualizado mi pregunta. Por favor, consulte – Starx

1

utilizar por debajo de código

$qry=SHOW TABLES FROM 'database_name'; 
$res=mysql_query($qry); 
$output=array(); 
$i=0; 
while($row=mysql_fetch_array($res,MYSQL_NUM)){ 
     ++$i; 
     $sql=SELECT COUNT(*) FROM $row[0]; 
     $output[$i]=mysql_query($sql); 
} 
$totalRows=array_sum($ouptput); 
echo $totalRows; 
+0

Whwy downvoted ??? al menos escriba alguna razón, por favor ... para que pueda actualizar mi conocimiento – diEcho

Cuestiones relacionadas