2011-05-08 14 views
34

Estoy haciendo una función de paginación usando Codeigniter, pero creo que esto se aplica a la codificación PHP/mySQL en general.Encontrar el número total de resultados en la consulta mySQL con desplazamiento + límite

Estoy recuperando listas de directorios usando desplazamiento y límite dependiendo de cuántos resultados quiero por página. Sin embargo, para conocer el número total de páginas requeridas, necesito saber (número total de resultados)/(límite). En este momento estoy pensando en ejecutar la consulta SQL por segunda vez, luego contar el número de filas requeridas pero sin usar LIMIT. Pero creo que esto parece ser un desperdicio de recursos computacionales.

¿Hay formas mejores? ¡Gracias!

EDIT: Mi consulta SQL utiliza DONDE así para seleccionar todas las filas con un 'category_id' particular,

+2

¡¡¡Tan increíble !!! Gracias por la pregunta, no entiendo por qué solo obtuvo 23 votaciones ascendentes. Pregunta tan fundamental. – Adam

Respuesta

6

SELECT COUNT(*) FROM table_name WHERE column = 'value' devolverá el número total de registros en una tabla que coincide con condiciones muy rápidamente.

Las operaciones de la base de datos SELECT suelen ser "baratas" (por lo que respecta a los recursos), así que no se sienta mal por usarlas de manera razonable.

EDITAR: Agregó WHERE después de que el OP mencionó que necesitan esa característica.

+0

Lo siento, olvidé agregar que mi consulta SQL usa DONDE también para seleccionar todas las filas con un particular 'category_id' – Nyxynyx

+0

nyx, ¿NO SELECCIONARÍA COUNT (*) FROM table_name WHERE condición todavía funciona? –

0
SELECT COUNT(id) FROM `table` WHERE `category_id` = 9 

Le da el número de filas para su categoría específica.

+0

'SELECT COUNT (*)' es más eficaz porque no necesitará verificar la exclusión del valor NULL – karmiphuc

2

Teniendo en cuenta que SQL_CALC_FOUND_ROWS requiere la invocación de FOUND_ROWS() después, si desea buscar el recuento total con los resultados devueltos desde su límite sin tener que recurrir a una segunda SELECT, me gustaría utilizar JOIN Los resultados derivados de un subquery:

SELECT * FROM `table` JOIN (SELECT COUNT(*) FROM `table` WHERE `category_id` = 9) t2 WHERE `category_id` = 9 LIMIT 50 

Nota: Cada tabla derivada debe tenerlo s propio alias, así que asegúrese de nombrar la tabla unida. En mi ejemplo, utilicé t2.

+0

Me gusta específicamente porque golpea el db una vez, pero me preguntaba si sería más "caro" que 2 'SELECT 's uno es un simple' COUNT (*) 'ya que realiza un' JOIN'. –

Cuestiones relacionadas