Problem:
Du vil gerne begrænse antallet af rækker i et resultatsæt i MySQL.
Eksempel:
Vores database har en tabel ved navn student
med data i kolonnerne id
, first_name
, last_name
og age
.
id | fornavn | efternavn | alder |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Møller | 19 |
4 | Mary | Brun | 25 |
5 | Lucy | Watson | 25 |
6 | Michael | Jackson | 22 |
Lad os vælge elevernes fulde navne og alder, men begrænse antallet af returnerede rækker til tre.
Løsning:
SELECT first_name, last_name, age FROM student LIMIT 3;
Her er resultatet af forespørgslen:
id | fornavn | efternavn | alder |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Møller | 19 |
Diskussion:
LIMIT-sætningen begrænser antallet af rækker i resultatsættet. Det bruges i SELECT-sætningen, normalt i slutningen af sætningen. (Selv ORDER BY skal være anført før LIMIT.)
Det eneste nødvendige argument er antallet af rækker, der skal vises. I vores eksempel producerede LIMIT 3 et resultatsæt indeholdende tre rækker. Medmindre du angiver andet med OFFSET-argumentet, vil denne funktion altid returnere det første n rækker, der opfylder forespørgselskravene.
LIMITs valgfrie OFFSET-argument placeres før argumentet, der angiver antallet af returnerede rækker. Det angiver positionen for den første række returneret af LIMIT (dvs. '0' er den første række, 1 er den anden række osv.). Forskydningen og antallet af rækker er adskilt af et komma.
Forespørgslen returnerer de samme poster som den forrige forespørgsel, fordi forskydningen er nul. (Nul er standardforskydningsværdien.)
SELECT first_name, last_name, age FROM student LIMIT 0, 3;
I disse forespørgsler er resultatrækkerne uordnede. Hvis du gerne vil vælge tre rækker fra et sorteret resultatsæt, skal du bruge BESTIL EFTER:
SELECT first_name, last_name, age FROM student ORDER BY age DESC, last_name, first_name LIMIT 1,3;
Her sorterer vi først rækkerne efter alder (faldende), derefter efternavn og derefter fornavn. Vi bruger offsetværdien til at starte på den anden returnerede række og begrænser resultaterne til tre rækker:
fornavn | efternavn | alder |
---|---|---|
Lucy | Watson | 25 |
Steven | Watson | 25 |
Michael | Jackson | 22 |
Denne forespørgsel sorterer først rækker efter alderskolonnen i faldende rækkefølge. Den sorterer derefter efter last_name
og first_name
i stigende rækkefølge. Hvis du ser på tabellen, vil du se, at de ældste elever (Steven, Lucy, Mary) er 25 år. Mary er dog udeladt, fordi hun er den første række, og forskydningen er 1 (dvs. vi starter med den anden række). Lucy er nu først, fordi hendes fornavn kommer før Stevens. (Steven og Lucy har samme efternavn, så deres rækkefølge bestemmes af fornavnet.) Michael er 22, hvilket gør ham til den næstældste elev og den sidste af de tre rækker, der er returneret.