Problém:
Chtěli byste omezit počet řádků v sadě výsledků v MySQL.
Příklad:
Naše databáze má tabulku s názvem student
s údaji ve sloupcích id
, first_name
, last_name
a age
.
id | křestní_jméno | last_name | věk |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Miller | 19 |
4 | Marie | Hnědá | 25 |
5 | Lucy | Watson | 25 |
6 | Michael | Jackson | 22 |
Vyberme celá jména a věk studentů, ale omezme vrácené řádky na tři.
Řešení:
SELECT first_name, last_name, age FROM student LIMIT 3;
Zde je výsledek dotazu:
id | křestní_jméno | last_name | věk |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Miller | 19 |
Diskuse:
Klauzule LIMIT omezuje počet řádků v sadě výsledků. Používá se v příkazu SELECT, obvykle na konci příkazu. (I ORDER BY by mělo být uvedeno před LIMIT.)
Jediným povinným argumentem je počet řádků k zobrazení. V našem příkladu LIMIT 3 vytvořil sadu výsledků obsahující tři řádky. Pokud pomocí argumentu OFFSET neurčíte jinak, tato funkce vždy vrátí první n řádky, které splňují požadavky dotazu.
Volitelný argument OFFSET LIMIT se umístí před argument udávající počet vrácených řádků. Označuje pozici prvního řádku vráceného LIMIT (tj. „0“ je první řádek, 1 je druhý řádek atd.). Posun a počet řádků jsou odděleny čárkou.
Dotaz vrátí stejné záznamy jako předchozí dotaz, protože posun je nula. (Nula je výchozí hodnota odsazení.)
SELECT first_name, last_name, age FROM student LIMIT 0, 3;
V těchto dotazech nejsou řádky výsledků seřazeny. Pokud byste chtěli vybrat tři řádky ze seřazené sady výsledků, použijte ORDER BY:
SELECT first_name, last_name, age FROM student ORDER BY age DESC, last_name, first_name LIMIT 1,3;
Zde nejprve seřadíme řádky podle věku (sestupně), poté příjmení a poté jména. Hodnotu offsetu použijeme pro začátek na druhém vráceném řádku a omezíme výsledky na tři řádky:
first_name | last_name | věk |
---|---|---|
Lucy | Watson | 25 |
Steven | Watson | 25 |
Michael | Jackson | 22 |
Tento dotaz nejprve seřadí řádky podle sloupce věku v sestupném pořadí. Poté seřadí podle last_name
a first_name
ve vzestupném pořadí. Když se podíváte na tabulku, uvidíte, že nejstarším studentům (Steven, Lucy, Mary) je 25 let. Mary je však vynechána, protože je první řadou a offset je 1 (tj. začínáme s druhou řadou). Lucy je nyní první, protože její křestní jméno je před Stevenovým. (Steven a Lucy mají stejné příjmení, takže jejich pořadí je určeno křestním jménem.) Michaelovi je 22, což z něj dělá dalšího nejstaršího studenta a posledního ze tří vrácených řad.