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.