Seleccionar y contar filas en una consulta: SQL_CALC_FOUND_ROWS. Seleccionar y contar filas en una consulta: SQL_CALC_FOUND_ROWS Usar la función COUNT() con un ejemplo

Una vez me enfrenté a este problema, pero muchas de las soluciones que se ofrecen en Internet no me funcionaron. Y sin embargo, encontré una manera. Y ni siquiera uno.

Método 1: phpMyAdmin

Comencemos con lo más simple y obvio. Suponga que no necesita usar el resultado en el código, sino simplemente averiguar el número de líneas, eso es todo.

Luego vamos a phpMyAdmin (localhost / tools / phpmyadmin - para Denver), luego seleccionamos la base de datos deseada, luego seleccionamos la tabla en la que se debe determinar el número de filas y vemos el siguiente mensaje:

Método 2. CONTAR

Así es como se ve la consulta SQL en sí:

Consulta SQL con condición:

Implementación en PHP:

Del mismo modo, aquí se puede añadir una condición. Luego, el código mostrará el número de filas en la tabla que satisfacen la condición.

Método 3. mysql_num_rows

Por ejemplo, en WordPress, las publicaciones se almacenan en la tabla wp_posts, por lo que podemos saber cuántas publicaciones (publicaciones) se almacenan en la base de datos (en la tabla MySQL). Este código es solo a modo de ejemplo (o para los casos en los que WordPress no está cargado), ya que WordPress se conecta a la base de datos a través del archivo .

El resultado incluirá absolutamente todos los registros. ¿Y cómo saber el número de sólo los que están publicados? Para hacer esto, necesitamos modificar ligeramente la consulta SQL.

Del autor: un amigo mío afirma que Santa Claus existe. Creyó en él después de que su hijo menor recibiera 10 kg de chocolates para el Año Nuevo. ¡Ahora el próximo año tendrás que pedirle a Papá Noel rellenos para todos los miembros de la familia! Afortunadamente, en la programación web, puede estar seguro de tales sorpresas y determinar el número de filas en MySQL de antemano.

¿Por qué saber cuánto?

Cualquier tabla consta de columnas y filas. La cantidad de datos almacenados en una base de datos depende de cuántas filas haya en cada una de sus tablas.

Así como el número de agujeros en los dientes de una persona depende de la cantidad de dulces que haya comido antes. Más precisamente, del peso total de los dulces que "regalaron" a su hijo para el Año Nuevo.

Está claro que una gran cantidad de filas en la base de datos MySQL no aumentará los sellos en la boca, pero sin embargo, el conocimiento de este parámetro puede ser necesario al optimizar su sitio, ejecutar algunos scripts, etc.

¡Fácilmente!

Para obtener el número de filas en MySQL, no es necesario ser "inteligente" al compilar consultas SQL. Simplemente abra la tabla deseada en el shell del programa y mire la identificación de la última fila. Es esta columna la que se usa con mayor frecuencia como clave única, y su valor se genera automáticamente (incremento automático) al incrementar uno (+1) con respecto al anterior.

Para probar este "axioma", abramos una tabla de cualquier base de datos en phpMyAdmin. Por ejemplo, la mesa de animales. Como puedes ver en la captura de pantalla, el valor de la columna id va en orden, de 1 a... ¡Así que, reserva! ¿Y a dónde se escapó el gato con el “número de identificación” 4? Probablemente, nuevamente, los "perros" en los números 5 y 6 estaban asustados.

En esta base de datos MySQL, el número de filas en la tabla simplemente se puede contar "con los dedos". Pero, ¿y si la tabla no tiene 7 filas, sino varios cientos? Por ejemplo, como en este.

Y esta es solo una de las ocho páginas de la muestra. De hecho, el número de registros se puede calcular no solo en cientos, sino también en miles. Además, no hay una columna de identificación porque es opcional. Su presencia depende de la estructura de toda la base de datos, ya que los valores de todas las filas están interconectados. Resulta que el método de recuento de filas de MySQL descrito anteriormente no siempre funciona.

Algunos métodos correctos

Como dicen, el primer método es "grumoso", así que consideremos varias formas más efectivas y menos "simples":

La función COUNT() devuelve el número de filas. Es una función SQL incorporada. De todos modos, averigüemos la cantidad de registros de una tabla grande de la base de datos, cuya captura de pantalla se muestra arriba. Código de solicitud:

SELECCIONE CONTEO(*) DESDE `país`

SELECCIONE CONTEO (*) DESDE `país`

¡Resulta que hay hasta 239 registros en la tabla de países! Está claro que no habrá suficientes dedos de manos o pies para contarlos (si no usa las extremidades de otras personas o animales)). Como puede ver, este método en MySQL de contar el número de filas funciona con mucha más precisión y se usa con mayor frecuencia.

¡Pero esta característica hace más que eso! Por ejemplo, se puede utilizar para averiguar cuántos de los países "representados" en la base de datos están en Europa:

Y también, cuántas veces se menciona cada país en la tabla. Ejemplo de solicitud:

SELECCIONE `Nombre`, CUENTA(*) DESDE `país` GRUPO POR `Nombre`

SELECCIONE `Nombre`, CUENTA (*) DE `país` GROUP BY `Nombre`

Con esta consulta, descubrimos la cantidad de filas en MySQL que mencionan cada país. De los resultados de su ejecución, se puede ver que una vez.

¡Casi lo olvido! Si aún no tiene la base de datos mundial con la que estamos trabajando hoy, puede descargarla desde este enlace del sitio web oficial de los desarrolladores de MySQL DBMS. Después de descargar el archivo con él, debe descomprimirlo y luego importar un servidor que no sea DB. En phpMyAdmin, esto se puede hacer a través del elemento del menú principal "Importar".

Hablé sobre este procedimiento con más detalle en uno de mis artículos anteriores.

La función MAX() - en algunos casos, también permite que MySQL averigüe el número de filas en una tabla. ¿Por qué a veces? Voy a explicar ahora. Recuerda la primera forma de contar que vimos al principio. Implica que el valor más grande de la columna id es igual al número de registros. El uso de esta función es una especie de "automatización" de ese método. MAX() devuelve el valor máximo de la columna especificada (id). Para probar la función, utilizaremos la tabla de ciudades, que también forma parte de la base de datos mundial. Código de solicitud:

SELECCIONE MAX(`ID`) DESDE `ciudad`

SELECCIONE MAX (` ID ` ) DE ` ciudad `

Como resultado de la consulta, obtuvimos el valor de la columna de la última fila. Resulta que MySQL contó el número de filas.

Si es necesario, puede obtener la última entrada en su totalidad:

SELECCIONE MAX(`ID`),`Nombre`,`Código del país`,`Distrito`,`Población` DE `ciudad`

SELECCIONE MAX (` ID ` ), ` Nombre ` , ` Código de país ` , ` Distrito ` , ` Población ` DE ` ciudad `

Tenga en cuenta que para la selección antes de llamar a la función, en lugar de "*" enumeramos el nombre de todas las columnas. Esta es una función de sintaxis cuando se usan funciones integradas en MySQL.

Determinar el número de registros en PHP

A menudo, en el código de los sitios PHP MySQL, es necesario obtener el número de filas para luego pasar este valor como un parámetro de entrada para su posterior procesamiento. Esto se puede hacer con el siguiente código:

query("SELECT * FROM `country`")) ( printf("La tabla tiene %d filas.\n", $resultado->num_filas); $resultado->close(); ) mysqli_close($con); ?>

Para determinar la cantidad de registros en una tabla MySQL, debe usar la función especial COUNT().

La función COUNT() devuelve el número de registros en una tabla que coinciden con los criterios especificados.

La función COUNT(expr) siempre cuenta solo las filas donde expr se evalúa como NOT NULL .

Una excepción a esta regla es el uso de la función COUNT() con un asterisco como argumento - COUNT(*) . En este caso, se cuentan todas las filas, independientemente de si son NULL o NOT NULL.

Por ejemplo, la función COUNT(*) devuelve el número total de registros en una tabla:

SELECCIONE CONTADOR(*) DESDE table_name

Cómo contar el número de registros y mostrar

Ejemplo de código PHP+MySQL para contar y mostrar el número total de filas:

$res = mysql_query("SELECT COUNT(*) FROM table_name") $fila = mysql_fetch_row($res); $total = $fila; // registros totales echo $total; ?>

Este ejemplo ilustra el uso más simple de la función COUNT(). Pero con esta función, puede realizar otras tareas.

Dada una columna de tabla particular como parámetro, la función COUNT(column_name) devuelve el número de registros en esa columna que no contienen un valor nulo. Las entradas con valores NULL se ignoran.

SELECCIONE CONTEO (nombre_columna) DESDE nombre_tabla

No puede usar la función mysql_num_rows(), porque para saber el número total de registros, necesita ejecutar una consulta SELECT * FROM db, es decir, obtener todos los registros, lo cual no es deseable, por lo que es preferible utiliza la función de conteo.

$resultado = mysql_query("SELECT COUNT (*) as rec FROM db");

Uso de la función COUNT() con un ejemplo

Aquí hay otro ejemplo del uso de la función COUNT(). Digamos que hay una tabla ice_cream con un catálogo de helados que contiene ID de categorías y nombres de helados.

A partir de la versión 4.0, MySQL DBMS tiene una capacidad bastante conveniente para contar el número de todos los registros que coinciden con la consulta cuando el número de registros está limitado por LIMIT. Cuando se trabaja con una búsqueda en la base de datos, así como cuando se selecciona de tablas con una gran cantidad de registros, dicha funcionalidad es simplemente necesaria.

Sintaxis. En una consulta SELECT, la lista de columnas debe estar precedida por la opción SQL_CALC_FOUND_ROWS. Aquí está el comienzo de la descripción de la sintaxis de la construcción SELECT.

SELECCIONE




select_expr, … …

Por lo tanto, al ejecutar una consulta SELECT SQL_CALC_FOUND_ROWS, el DBMS contará el número total de filas que coinciden con la condición de la consulta y almacenará este número en la memoria. Naturalmente, la consulta SELECT SQL_CALC_FOUND_ROWS solo tiene sentido cuando se usa un límite (LIMIT). Inmediatamente después de ejecutar la consulta de selección, para obtener la cantidad de registros, debe ejecutar otra consulta SELECT: SELECT FOUND_ROWS ();. Como resultado, MySQL devolverá una fila con un campo, que almacenará el número de filas.

Un ejemplo de las propias solicitudes:

> SELECCIONE SQL_CALC_FOUND_ROWS * DESDE tbl_name DONDE número > 100 LÍMITE 10;
> SELECCIONE FILAS_ENCONTRADAS();

La primera consulta devolverá (mostrará) 10 filas de la tabla tbl_name para las que se cumple el número de condición > 100. La segunda llamada al comando SELECT devolverá el número de filas que el primer comando SELECT habría devuelto si se hubiera escrito sin una instrucción LIMIT. Aunque MySQL debe recalcular todas las filas en el conjunto de resultados cuando usa el comando SELECT SQL_CALC_FOUND_ROWS, este método es aún más rápido que sin LIMIT porque no necesita enviar el resultado al cliente.

Solicitudes de ejemplo de PHP:

$resultado = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM table1 LIMIT 0, 10", $enlace);
while ($fila = mysql_fetch_assoc($resultado))
{
var_dump($fila);
}

$resultado = mysql_query("SELECT FOUND_ROWS()", $enlace);
$num_rows = mysql_result($resultado, 0);
echo "$num_rows Filas\n";

Como resultado de ejecutar el código, siempre que $link apunte a una conexión abierta al DBMS, PHP imprimirá 10 filas de la tabla table1 y luego un valor entero de la cantidad de filas que coinciden con la consulta (excluyendo LIMIT).

En consultas UNION, SQL_CALC_FOUND_ROWS puede comportarse de dos maneras debido al hecho de que LIMIT puede aparecer en varios lugares. El recuento de filas se puede realizar para consultas SELECT individuales o para la consulta completa después de una combinación.

El propósito de SQL_CALC_FOUND_ROWS para UNION es que devuelva el número de filas que se devolverán sin un LÍMITE global. Las condiciones para usar SQL_CALC_FOUND_ROWS con UNION se enumeran a continuación:

  • La palabra clave SQL_CALC_FOUND_ROWS debe especificarse en la primera instrucción SELECT.
  • El valor de FOUND_ROWS() solo será preciso si se usa UNION ALL. Si se especifica UNION sin ALL, se eliminan los duplicados y FOUND_ROWS() es solo una aproximación.
  • Si no hay LIMIT presente en UNION, se ignora SQL_CALC_FOUND_ROWS y se devuelve el número de filas en la tabla temporal que se crea para ejecutar UNION.