Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie wähle ich paginierungsweise N Datensätze aus der MySQL-Datenbank aus?

ersten hundert

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

nächsten hundert

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

Sie sind sehr aufmerksam, wenn es darum geht, die Bestellung aufzugeben

DIE GRENZWERTE ERKLÄRT: Das LIMIT -Anweisung ist KEIN WHERE Klausel. Es wird nicht nach id ausgewählt noch nach irgendwelchen Kriterien (dort where Klausel tut das) Stattdessen das limit -Klausel stellt einfach sicher, dass Sie einen Teil des block zurückgeben von Ergebnissen, die eine Teilmenge von "alles" sind. Daher ist es wichtig, einen order by zu erwähnen jedes Mal, so dass jeder nachfolgende Aufruf Ihnen den richtigen Teil des Datenblocks in der richtigen Reihenfolge liefert, und Sie können durch sie 'weiter', 'weiter', 'weiter' gehen

ZB:für die ungeordnete Tabelle this_table :

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

die Auswahlen kehren wie folgt zurück:

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

und

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

Beachten Sie das Fehlen der Zeilen 9 und 10. Dies ist absichtlich und zeigt, dass MySQL wie beabsichtigt funktioniert

Übrigens sollten Sie auch einen Index für id hinzufügen dies wird die Geschwindigkeit dieser Auswahlen massiv erhöhen

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