Problem:
Du vill begränsa antalet rader i en resultatuppsättning i MySQL.
Exempel:
Vår databas har en tabell som heter student
med data i kolumnerna id
, first_name
, last_name
och age
.
id | förnamn | efternamn | ålder |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Miller | 19 |
4 | Maria | Brun | 25 |
5 | Lucy | Watson | 25 |
6 | Michael | Jackson | 22 |
Låt oss välja elevernas fullständiga namn och ålder, men begränsa raderna som returneras till tre.
Lösning:
SELECT first_name, last_name, age FROM student LIMIT 3;
Här är resultatet av frågan:
id | förnamn | efternamn | ålder |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Miller | 19 |
Diskussion:
LIMIT-satsen begränsar antalet rader i resultatuppsättningen. Det används i SELECT-satsen, vanligtvis i slutet av satsen. (Även ORDER BY bör anges före LIMIT.)
Det enda nödvändiga argumentet är antalet rader som ska visas. I vårt exempel producerade LIMIT 3 en resultatuppsättning som innehåller tre rader. Om du inte anger något annat med OFFSET-argumentet kommer denna funktion alltid att returnera det första n rader som uppfyller frågekraven.
LIMITs valfria OFFSET-argument placeras före argumentet som anger antalet returnerade rader. Den indikerar positionen för den första raden som returneras av LIMIT (dvs '0' är den första raden, 1 är den andra raden, etc.). Förskjutningen och antalet rader separeras med ett kommatecken.
Frågan returnerar samma poster som den föregående frågan eftersom förskjutningen är noll. (Noll är standardvärdet för offset.)
SELECT first_name, last_name, age FROM student LIMIT 0, 3;
I dessa frågor är resultatraderna oordnade. Om du vill välja tre rader från en sorterad resultatuppsättning, använd ORDER BY:
SELECT first_name, last_name, age FROM student ORDER BY age DESC, last_name, first_name LIMIT 1,3;
Här sorterar vi först raderna efter ålder (fallande), sedan efternamn och sedan förnamn. Vi använder offsetvärdet för att börja på den andra returnerade raden och begränsa resultaten till tre rader:
förnamn | efternamn | ålder |
---|---|---|
Lucy | Watson | 25 |
Steven | Watson | 25 |
Michael | Jackson | 22 |
Den här frågan sorterar först rader enligt ålderskolumnen i fallande ordning. Den sorteras sedan efter last_name
och first_name
i stigande ordning. Om du tittar på tabellen ser du att de äldsta eleverna (Steven, Lucy, Mary) är 25 år gamla. Mary är dock utelämnad eftersom hon är den första raden och förskjutningen är 1 (dvs. vi börjar med den andra raden). Lucy är nu först eftersom hennes förnamn kommer före Stevens. (Steven och Lucy har samma efternamn, så deras ordning bestäms av förnamnet.) Michael är 22, vilket gör honom till den näst äldsta eleven och den sista av de tre raderna som kommer tillbaka.