sql >> Database teknologi >  >> RDS >> Mysql

Hvordan vælger man pagineringsmæssigt N antal poster fra MySQL-databasen?

første hundrede

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

næste hundrede

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

du er meget opmærksom på at lægge ordren ind

Grænsesætningen ER FORKLART: LIMIT sætning er IKKE en WHERE klausul. Den vælger ikke efter id heller ikke efter nogen kriterier (der where klausulen gør det) I stedet for limit klausulen sikrer blot, at du får returneret en del af block af resultater, der er en delmængde af "alt". Derfor er det vigtigt at nævne en order by hver gang, så hvert efterfølgende opkald giver dig den rigtige del af datablokken i rækkefølge, og du kan 'næste', 'næste', 'næste' gennem dem

EG:for den uordnede tabel this_table :

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

valgene returnerer som nedenfor:

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

og

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

Bemærk manglen på række 9 og 10, dette er bevidst og viser, at MySQL fungerer efter hensigten

i øvrigt bør du også se på at tilføje et indeks på id dette vil MASSIVT øge hastigheden af ​​disse valg

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


  1. Opretter du en brugerdefineret MySQL-funktion?

  2. OPDATERE med INNER JOIN eller MIN?

  3. En Ejendomsmægler Data Model

  4. Del 2 - Sådan organiseres et stort databasediagram