Stránkování: OFFSET
Obchod s tisíci her je neukazuje všechny najednou. Ukáže jich třeba dvacet na stránku a k tomu tlačítka na další stránky. V SQL se stránky dělají pomocí OFFSET (posun), který přeskočí zadaný počet řádků, než LIMIT začne počítat:
SELECT jmeno, mesto
FROM zakaznici
ORDER BY jmeno
LIMIT 5 OFFSET 5;| jmeno | mesto |
|---|---|
| Klára Horáková | Plzeň |
| Kristýna Fialová | Brno |
| Lukáš Procházka | Ostrava |
| Martin Zeman | Plzeň |
| Matěj Němec | Praha |
To je druhá stránka zákazníků, pět na stránku: OFFSET 5 přeskočí prvních pět (od Adély Králové po Jakuba Dvořáka) a LIMIT 5 ukáže dalších pět. První stránka má OFFSET 0, což je totéž jako žádný OFFSET, a třetí stránka OFFSET 10. Obecně stránka přeskočí řádky všech stránek před ní: (číslo stránky − 1) × počet řádků na stránku.
Poslední stránka může být kratší. Obchod má 14 zákazníků, takže na třetí stránce jsou jen čtyři. A když OFFSET přeskočí všechny řádky, je výsledek prázdný: jen názvy sloupců.
Stránky potřebují řazení, které dá jedno přesné pořadí. Kdyby měly dva řádky stejnou hodnotu, mohla by databáze jeden z nich ukázat na konci první stránky a znovu na začátku druhé a jiný na žádné. Proto se stránky řadí podle něčeho, co se neopakuje, nebo se jako poslední sloupec řazení přidá třeba id.
SQLite rozumí i kratšímu zápisu LIMIT 5, 5, ale pozor: tam je první počet řádků, které se mají přeskočit, takže LIMIT 10, 5 přeskočí deset řádků a ukáže pět. To se snadno splete, a proto tento kurz píše OFFSET.
Jak psát:
Pokyny
Dotaz v editoru ukazuje první stránku katalogu obchodu: hry seřazené podle názvu, čtyři na stránku. Změňte ho tak, aby ukázal třetí stránku:
| nazev | cena |
|---|---|
| Lost Temple | 499 |
| Moon Farm | 499 |
| Mystery Manor | 649 |
| Ocean Deep | 399 |
Pod něj přidejte dotaz, který ukáže název a cenu jediné hry: druhé nejdražší.
| nazev | cena |
|---|---|
| Goal Rush | 1299 |
Začněte programovat zdarma
7/12