mysql.h


FOUND_ROWS

FOUND_ROWS()

Una sentencia SELECT puede incluir una cláusula LIMIT para restringir el número de filas que el servidor devuelve al cliente. En algunos casos, es posible que se quiera conocer cuántas filas se hubiesen obtenido sin la cláusula LIMIT, pero sin ejecutar la sentencia de nuevo. Para obtener este número, hay que incluir la opción SQL_CALC_FOUND_ROWS en la sentencia SELECT, y después invocar la función FOUND_ROWS():

mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
       WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();

El segundo SELECT devolverá un número que indica cuántas filas hubiera devuelto el primer SELECT si no se hubiese usado la cláusula LIMIT. (Si la sentencia SELECT no inluye la opción SQL_CALC_FOUND_ROWS, entonces FOUND_ROWS() podrá devolver un valor diferente cuando se usa LIMIT y cuando no se usat.) Si se usa SELECT SQL_CALC_FOUND_ROWS ... MySQL debe calcular cuántas filas hay en el conjunto de resultados completo. Sin embargo, esto es más rápido que ejecutar una nueva consulta sin el LIMIT, ya que no es necesario enviar el conjunto de resultados al cliente. SQL_CALC_FOUND_ROWS y FOUND_ROWS() suelen usarse en situaciones en las que se quiere restringir el número de filas que devuelva una consulta, pero tambien se quiere determinar el número de filas en el conjunto de resultados completo sin ejecutar la consulta de nuevo. Un ejemplo es un script web que presente una muestra paginada conteniendo enlaces a páginas que muestran otras secciones del resultado de una búsqueda. Usando FOUND_ROWS() es posible determinar cuantas de esas páginas son necesarias para mostrar el resto de los resultados. El uso de SQL_CALC_FOUND_ROWS y FOUND_ROWS() es más complejo en el caso de consultas UNION que para sentencias sencillas SELECT, porque LIMIT puede ocurrir en muchos lugares en una UNION. Debe ser aplicado a sentencias SELECT individuales en la UNION, o globalmente al resultado de la UNION completo. El objetivo de SQL_CALC_FOUND_ROWS para UNION es que devuelva el número de filas que serían devueltas sin un LIMIT global. Las condicione para usar SQL_CALC_FOUND_ROWS con UNION son:

  • La palabra clave SQL_CALC_FOUND_ROWS debe aparecer en el primer SELECT de la UNION.
  • El valor de FOUND_ROWS() es exaco sólo si se usa UNION ALL. Si se usa UNION sin ALL, se eliminan los duplicados y el valor de FOUND_ROWS() sólo es aproximado.
  • Si no hay una cláusula LIMIT en la UNION, SQL_CALC_FOUND_ROWS se ignora y devuelve el número de filas en la tabla temporal que se crearon al procesar UNION.

SQL_CALC_FOUND_ROWS y FOUND_ROWS() están disponibles desde la versión 4.0.0 de MySQL.