sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo seleccionar la paginación sabia N número de registros de la base de datos MySQL?

primeros cien

 SELECT * FROM <table_name> ORDER BY id ASC LIMIT 0, 100

próximos cien

 SELECT * FROM <table_name> ORDER BY id ASC LIMIT 100, 100

eres muy observador al poner el orden por en

EXPLICACIÓN DE LA DECLARACIÓN DE LÍMITES: El LIMIT declaración NO es un WHERE cláusula. No selecciona por id ni de hecho por ningún criterio, (hay where hace eso) En lugar del limit la cláusula simplemente asegura que se le devuelva una parte del block de resultados que son un subconjunto de "todo". Por eso es importante mencionar un order by cada vez, para que cada llamada subsiguiente le proporcione la parte correcta del bloque de datos en orden, y puede 'siguiente', 'siguiente', 'siguiente' a través de ellos

EG:para la tabla desordenada this_table :

+-------+-------------+
|  id   |   value     |
+-------+-------------+
|  1    |     bob     |
|  12   |     fish    |
|  112  |     pink    |
|  2    |     cat     |
|  8    |     dog     |
|  56   |     blue    |
|  88   |     grey    |
|  87   |     red     |
+-------+-------------+

las selecciones regresan de la siguiente manera:

SELECT * FROM <this_table> ORDER BY id ASC LIMIT 0,5
+-------+-------------+
|  id   |   value     |
+-------+-------------+
|  1    |     bob     |
|  2    |     cat     |
|  8    |     dog     |
|  12   |     fish    |
|  56   |     blue    |
+-------+-------------+

y

SELECT * FROM <this_table> ORDER BY id ASC LIMIT 5,5
+-------+-------------+
|  id   |   value     |
+-------+-------------+
|  87   |     red     |
|  88   |     grey    |
|  112  |     pink    |
+-------+-------------+

observe la falta de las filas 9 y 10, esto es deliberado y muestra que MySQL funciona según lo previsto

por cierto, también debería considerar agregar un índice en id esto aumentará MASIVAMENTE la velocidad de estas selecciones

ALTER TABLE <table_name> ADD INDEX `id` (`id`)