2009-09-29 19 views
16

En MySQL, ¿cómo puedo recuperar TODAS las filas en una tabla, comenzando desde la fila X? Por ejemplo, a partir de la fila 6:Cómo obtener TODAS las filas desde la fila x en MySQL

LIMIT 5,0 

Esto devuelve nada, por lo que este tratado:

LIMIT 5,ALL 

Todavía no hay resultados (error de SQL).

No estoy buscando la funcionalidad de paginación, simplemente recuperando todas las filas a partir de una fila en particular. LIMIT 5,2000 me parece exagerado. De alguna manera, Google parece no obtener algunas respuestas. Espero que puedas ayudar.

Gracias

Respuesta

30

De acuerdo con la documentation:

para recuperar todas las filas de un desplazamiento hasta el final del conjunto de resultados, puede utilizar algún número grande para el segundo parámetro. Esta instrucción recupera todas las filas de la fila 96a de la última:

SELECT * FROM tbl LIMIT 95, 18446744073709551615; 

Este es el maximum rows a MyISAM table can hold, 2^64-1.

Hay un límite de 2^32 (~ 4.295E + 09) filas en una tabla MyISAM. Si construye MySQL con la opción --with-big-tables, la limitación de filas se incrementa a (2^32)^2 (1.844E + 19) filas. Consulte la Sección 2.16.2, "Opciones de configuración típicas". Las distribuciones binarias para Unix y Linux se crean con esta opción.

+1

Gracias Greg, su respuesta no podría ser más completa :) – SolidSmile

+1

Buena respuesta, he ajustado el enlace manual para que vaya al punto correcto en la página y borre mi respuesta en gran parte duplicada :) –

0

La única solución que conozco actualmente es hacer lo que dices y dar un número ridículamente alto como el segundo argumento para LIMITAR. No creo que haya ninguna diferencia en el rendimiento para especificar un número bajo o un número alto, mysql simplemente dejará de devolver las filas al final del conjunto de resultados, o cuando llegue a su límite.

3

Si está buscando obtener el último x número de filas, lo más fácil es SORT DESC y LIMITAR al primeras filas x. De acuerdo, el SORT ralentizará tu consulta. Pero si te opones a establecer un número arbitrariamente grande como el segundo LIMIT arg, entonces esa es la manera de hacerlo.

+2

¿Puede alguien explicar por qué? esta respuesta es downvoted? –

-1

La siguiente consulta debería funcionar también, y en mi opinión es más eficaz ...

SELECT * FROM mytbl WHERE id != 1 ORDER BY id asc 

Al ordenar la consulta se encuentra el ID Protected y evita este, por lo que las siguientes filas que no lo hará verifique si el ID = 1.

0

Creo que no necesita ingresar el valor máximo para seleccionar todo por LIMIT. Es suficiente encontrar el conteo de la tabla y luego usarlo como máximo LIMIT.

Cuestiones relacionadas