2011-03-11 16 views
6

estoy haciendo un método de paginación, lo que hice fue: primera consulta contará todos los resultados y la segunda consulta hará el selecto normal con LÍMITEobtener el límite total en mysql con la misma consulta?

¿Hay técnicamente ninguna manera de hacer esto lo que he hecho, pero con solo una consulta?

Lo que tengo ahora:

SELECT count(*) from table 
SELECT * FROM table LIMIT 0,10 

Respuesta

3

usted puede hacerlo con una subconsulta:

select 
    *, 
    (select count(*) from mytable) as total 
from mytable LIMIT 0,10 

Pero no creo que esto tiene algún tipo de ventaja.

editar: Como dijo Ilya, el recuento total y las filas tienen un significado totalmente diferente, no hay ningún punto real en el deseo de recuperar estos datos en la misma consulta. Me quedaré con las dos consultas. Acabo de dar esta respuesta para demostrar que esto es posible, no que sea una buena idea.

+0

Esto devolverá el resultado de 'count (*)' varias veces, no tiene sentido escribir dicha consulta. Lo triste es que conozco algunos programadores que lo habrían hecho de esta manera sin pestañear. –

+0

es la razón por la que dije que no hay ventaja para hacer cosas como esta. Pero si hay algún tipo de requisito que lo haga todo en una consulta, ¿por qué no? Esto no perjudicará tanto el rendimiento. – krtek

+2

@Krtek No está haciendo una consulta allí sino 2. Una consulta secundaria o una consulta normal es aquí lo mismo. Entonces, ¿por qué no hacer solo 2 consultas para mejorarlo? Un requisito para 1 revestimiento no tiene ningún sentido aquí: P. Aún así, usted tiene la única solución: -P –

2

Puede ejecutar la primera consulta y luego la segunda consulta, de modo que obtendrá el recuento y los primeros resultados.

Una consulta devuelve un conjunto de registros. El conteo definitivamente no es uno de los registros que puede devolver una consulta "SELECT *", porque solo hay un recuento para todo el conjunto de resultados.

De todos modos, no dijiste en qué lenguaje de programación ejecutas estas consultas SQL y qué interfaz estás usando. Tal vez esta opción existe en la interfaz.

3

Mientras que he visto algunos malos métodos para esto, cuando he mirado en esta previamente había dos soluciones comúnmente aceptadas:

  1. de ejecutar la consulta y luego ejecutan la misma consulta con un count como usted hecho en tu pregunta.

  2. Ejecute su consulta y luego ejecútela nuevamente con la palabra clave SQL_CALC_FOUND_ROWS.

por ejemplo. SELECT SQL_CALC_FOUND_ROWS * FROM table LIMIT 0,10

Este segundo enfoque es cómo lo hace phpMyAdmin.

2

SELECT SQL_CALC_FOUND_ROWS aquí su consulta límite ...

sin correr ningún tipo de duda o destruir la sesión a continuación, ejecutar FOUND_ROWS SELECT();

Y obtendrá el número total de filas

12

En realidad, nadie menciona esto, pero la forma correcta de utilizar la técnica SQL_CALC_FOUND_ROWS es así:

  1. realiza su consulta: SELECT SQL_CALC_FOUND_ROWS * FROM `table` LIMIT 0, 10
  2. A continuación, ejecute esta consulta directamente después: SELECT FOUND_ROWS(). El resultado de esta consulta contiene el recuento completo de la consulta anterior, es decir, como si no hubiera utilizado la cláusula LIMIT.Esta segunda consulta es instantáneamente rápida, porque el resultado ya ha sido almacenado en caché.
Cuestiones relacionadas