Menú
Está libre
registro
hogar  /  SOBRE/ Cómo contar todas las filas en mysql. Obtención y recuento de filas en una consulta: SQL_CALC_FOUND_ROWS

Cómo contar todas las filas en mysql. Obtención y recuento de filas en una consulta: SQL_CALC_FOUND_ROWS

A partir de la versión 4.0, MySQL DBMS tiene suficiente oportunidad conveniente contando el número de todos los registros elegibles para la solicitud cuando el número de registros está limitado por LIMIT. Cuando se trabaja con una búsqueda en una base de datos, así como cuando se realizan selecciones de tablas con gran cantidad registros, dicha funcionalidad es simplemente necesaria.

Sintaxis. En la consulta SELECT, la opción SQL_CALC_FOUND_ROWS debe especificarse antes de la lista de columnas. Aquí está el comienzo de la sintaxis de la cláusula SELECT.

SELECCIONE




select_expr, ... ...

Por lo tanto, al hacer SELECCIONAR consulta SQL_CALC_FOUND_ROWS El DBMS contará el número total de filas que coinciden con la condición de consulta y almacenará este número en la memoria. Naturalmente, la consulta SELECT SQL_CALC_FOUND_ROWS solo tiene sentido cuando se usa la restricción (LIMIT). Inmediatamente después de ejecutar una consulta de selección para obtener el número 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:

> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name DONDE número> 100 LÍMITE 10;
> SELECCIONAR FOUND_ROWS ();

La primera consulta devolverá (imprimirá) 10 filas de la tabla tbl_name para la cual el número de condición> 100 es verdadero. 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 cláusula LIMIT. Aunque el uso del comando SELECT SQL_CALC_FOUND_ROWS requiere que MySQL recalcule todas las filas en el conjunto de resultados, este método es aún más rápido que sin LIMIT, ya que no necesita enviar el resultado al cliente.

Solicitudes de muestra de PHP:

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

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

Como resultado de la ejecución del código, siempre que $ link apunte a una conexión abierta al DBMS, PHP generará 10 filas de table1, y luego un valor entero para el número de filas que coinciden con la consulta (excluyendo LIMIT).

En consultas con UNION, SQL_CALC_FOUND_ROWS puede comportarse de dos formas debido a que LIMIT puede aparecer en varios lugares. El recuento de filas se puede realizar para consultas SELECT individuales o para toda la consulta después de la concatenación.

El propósito de SQL_CALC_FOUND_ROWS para UNION es que debe devolver el número de filas que se devolverán sin un LÍMITE global. Las condiciones para usar SQL_CALC_FOUND_ROWS con UNION son las siguientes:

  • La palabra clave SQL_CALC_FOUND_ROWS debe aparecer en la primera instrucción SELECT.
  • FOUND_ROWS () solo será preciso si se usa UNION ALL. Si se especifica UNION sin ALL, se produce la deduplicación y FOUND_ROWS () solo es aproximado.
  • Si LIMIT no está presente en UNION, entonces se ignora SQL_CALC_FOUND_ROWS y se devuelve el número de filas en la tabla temporal que se crea para ejecutar UNION.
Recordemos qué mensajes y en qué temas tenemos. Para hacer esto, puede utilizar la consulta habitual:

Pero, ¿qué pasa si solo necesitamos averiguar cuántos mensajes hay en el foro? Para hacer esto, puede utilizar la función incorporada CONTAR ()... Esta función cuenta el número de filas. Además, si * actúa como argumento para esta función, se cuentan todas las filas de la tabla. Y si se especifica un nombre de columna como argumento, solo se cuentan las filas que tienen un valor en la columna especificada.

En nuestro ejemplo, ambos argumentos darán el mismo resultado, ya que todas las columnas de la tabla NO son NULAS. Escribamos una consulta usando la columna id_topic como argumento:

SELECCIONAR COUNT (id_topic) DE publicaciones;

Entonces, hay 4 publicaciones en nuestros hilos. Pero, ¿qué pasa si queremos saber cuántas publicaciones tiene cada tema? Para hacer esto, necesitamos agrupar nuestros mensajes por tema y calcular la cantidad de mensajes para cada grupo. Para agrupar en SQL, use el operador AGRUPAR POR... Nuestra solicitud ahora se verá así:

SELECT id_topic, COUNT (id_topic) FROM posts GROUP BY id_topic;

Operador AGRUPAR POR le dice al DBMS que agrupe los datos por la columna id_topic (es decir, cada tema es un grupo separado) y que cada grupo cuente el número de filas:

Bueno, en el tema con id = 1 tenemos 3 mensajes, y con id = 4 - uno. Por cierto, si no hubiera valores en el campo id_topic, dichas filas se combinarían en un grupo separado con un valor NULL.

Supongamos que solo estamos interesados ​​en grupos con más de dos mensajes. En una consulta normal, especificaríamos una condición usando el operador DÓNDE, pero este operador solo puede trabajar con cadenas, y para los grupos, el operador realiza las mismas funciones TENIENDO:

SELECCIONE id_topic, COUNT (id_topic) FROM posts GROUP BY id_topic TENIENDO COUNT (id_topic)> 2;

Como resultado, tenemos:

En la lección 4, consideramos qué condiciones puede establecer el operador DÓNDE, el operador puede establecer las mismas condiciones TENIENDO, solo necesitas recordar eso DÓNDE filtra las líneas, y TENIENDO- grupos.

Así que hoy aprendimos cómo crear grupos y cómo contar el número de filas en una tabla y en grupos. Generalmente, junto con el operador AGRUPAR POR puede utilizar otras funciones integradas, pero las estudiaremos más adelante.

Para determinar el número de registros en una tabla MySQL, necesita usar la función especial COUNT ().

La función COUNT () devuelve el número de registros en una tabla que coinciden con un criterio dado.

La función COUNT (expr) siempre cuenta solo aquellas 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 consideran 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:

SELECT COUNT (*) FROM table_name

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

Un 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; // total de registros echo $ total; ?>

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

Al especificar una columna específica en una tabla como parámetro, la función COUNT (column_name) devuelve el número de registros en esa columna que no contienen NULL. Las entradas NULL se ignoran.

SELECT COUNT (column_name) FROM table_name

No se puede usar la función mysql_num_rows (), porque para conocer el número total de registros es necesario ejecutar la consulta SELECT * FROM db, es decir, obtener todos los registros, lo cual no es deseable, por lo tanto, es preferible use la función de conteo.

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

Usando la función COUNT () por ejemplo

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

Una vez encontré este problema, pero muchas de las soluciones ofrecidas en Internet no funcionaron para mí. Y sin embargo encontré una salida. Y ni siquiera uno.

Método 1.phpMyAdmin

Empecemos por lo más simple y obvio. Digamos que no necesita usar el resultado en el código, pero solo averigüe el número de líneas, eso es todo.

Luego vaya a phpMyAdmin (localhost / tools / phpmyadmin - para Denver), luego seleccione la base de datos deseada, luego seleccione la tabla, la cantidad de filas en las que necesita averiguarlo y vemos el siguiente mensaje:

Método 2. COUNT

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

Consulta SQL con condición:

Implementación de PHP:

Del mismo modo, puede agregar una condición aquí. 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 averiguar cuántas publicaciones (publicaciones) se almacenan en la base de datos (en la tabla MySQL). Este código se da solo por ejemplo (o para los casos en los que el entorno de WordPress no está cargado), ya que en WordPress la conexión a la base de datos se realiza a través de la clase.

El resultado incluirá absolutamente todos los registros. ¿Y cómo saber el número de solo los que se publican? Para hacer esto, necesitamos cambiar ligeramente la consulta SQL.