Contar resultados de una consulta.

Resumen.

Una de las tareas más comunes en MySQL es el recuento de resultados de una consulta, y ya hablamos de la importancia de minimizar el consumo de recursos en las acciones sobre bases de datos. En este capitulo vamos a ver dos formas de contar resultados y veremos la diferencia entre mysqli_num_rows() y COUNT().

Artículo.

Contar el número de registros para una tabla sigue los mismos criterios que siguen el resto de consultas. La estructura de una consulta es básicamente esta:

SELECT * FROM $tb1


Y el asterisco “*” tiene un valor, que es decirnos que tengamos en consideración todos los campos de la tabla. Pero podemos no tenerlos todos en consideración si no nos hace falta, de esta forma podemos hacer la consulta sobre un valor único no nulo, como puede ser el típico campo “id” que nos numera los registros de la tabla. Es un campo “ligero” en cuanto al espacio que ocupa, lo que lo hace perfecto para el recuento de resultados. La consulta quedaría entonces así:

SELECT id FROM $tb1


De esta forma mediante mysqli_num_rows podemos contar los resultados de la siguiente manera:

$_Regis_tb = "SELECT id FROM $tb1";
$_Cuenta_tb = mysqli_query($Conex_BD, $_Regis_tb);
$_Total_tb = mysqli_num_rows($_Cuenta_tb);


Donde la variable $_Total_tb contendrá el número de registros de la tabla.

Así, en términos generales podemos decir que el recuento de resultados sobre todos los campos, es un error, pero un error fácil de subsanar. La consulta, como otra consulta cualquiera, la podemos ampliar estableciendo un condicional, algo así como esto:

SELECT id FROM $tb1 WHERE sexo = '2'


Por supuesto, en este tipo de consultas, no tiene sentido establecer un orden en los resultados, por lo que introducir un ORDER BY, solo hace que la consulta consuma más recursos sin modificar el resultado del recuento.

Se desaconseja usar mysqli_num_rows() dado su consumo de recursos, lo que claro, esto es aplicable a tablas grandes, tablas con unas pocas decenas o centenas de registros, poco ganaremos si es que ganamos algo con otra consulta mas eficiente. Pero como todo es una cuestión de costumbres, vamos a ver como realizaríamos un recuento con COUNT(). La consulta básica seria la siguiente, a la que podemos agregar un condicional WHERE, como ya dijimos anteriormente.

SELECT COUNT(*) AS Nregis FROM $tb1


Como ya dijimos antes, el asterisco (*) hace que consultemos todos los campos, y de igual forma que dijimos antes, podemos cambiarlo por el nombre de un campo, por ejemplo, el “id”. Quedando la consulta de la siguiente forma:

SELECT COUNT(id) AS Nregis FROM $tb1


En esta consulta aparece un nuevo elemento, el comando “AS”, que es una forma de designar un alias, es decir, un nuevo nombre que será “Nregis”. El código de recuento de resultados con COUNT seria el siguiente:

$_Regis_tbl = "SELECT COUNT(id) AS Nregis FROM $tb1";
$_Cuenta_Reg = mysqli_query($Conex_BD, $_Regis_tbl);
$T_regis = mysqli_fetch_assoc($_Cuenta_Reg);

$Tot_regis = $T_regis['Nregis'];


Aquí hemos usado la sentencia mysqli_fetch_assoc que devuelve un array cuya key será “Nregis”, por lo que recogemos este valor del array en la variable $Tot_regis.

Este tipo de recuento es el que debemos utilizar inexcusablemente cuando tenemos tablas grandes, por otro lado, no esta mal usarlo para todos los casos aunque su sintaxis sea un poco mas compleja que con mysqli_num_rows.

También hay otra diferencia entre mysqli_num_rows y COUNT, y es que el primero cuenta los valores null como un registro mas, mientras que COUNT no toma en consideración en el recuento los valores nulos (null). Diferencia esta muy importante que debemos tener en cuenta tanto en el diseño de nuestras tablas, como en el tipo de campo que usamos para hacer el recuento.

La sintaxis de ambos tipos de recuento de resultados es la siguiente:

<?php
// Contar registros en tablas MySQL
include('archivos/func_conexionBD.php');

$Conex_BD = ConectaBD();
// Usando MYSQLI_NUM_ROWS
$_Regis_tb = "SELECT id FROM $tb1";
$_Cuenta_tb = mysqli_query($Conex_BD, $_Regis_tb);
$_Total_tb = mysqli_num_rows($_Cuenta_tb);

// Usando COUNT
$_Regis_tbl = "SELECT COUNT(id) AS Nregis FROM $tb1";
$_Cuenta_Reg = mysqli_query($Conex_BD, $_Regis_tbl);
$T_regis = mysqli_fetch_assoc($_Cuenta_Reg);

$Tot_regis = $T_regis['Nregis'];

DesconectaBD($Conex_BD);

echo "<p>Resultados con mysqli_num_rows: $_Total_tb registros.
<hr>
Resultados con COUNT(): $Tot_regis registros.</p>";

echo '<pre>';
print_r($T_regis);
echo '</pre>';

?>


Esperamos os resulte útil este interesante artículo.
Tags: Contar || mysqli_num_rows || COUNT || asterisco

Comentarios.

Sin comentarios, publica el tuyo.