Riešil som tento problém dovtedy, kým som sa nepozrel do manuálu jazyka PostgreSQL. Nedá mi nepodeliť sa s vami o tento poznatok. Implicitne predpokladajme, že v PHP alebo inom skriptovacom jazyku máme podmienky pre stránkovanie pripravené.
Problém bol v tom, že pri správe databázy sa nepristupuje len do konzistentnej tabuľky
ako celku. Používajú sa aj rôzne SELECT príkazy a iné „obludnosti“
a tým môže výpis dovtedy konzistentného ID vyzerať aj nejako takto:
| ID | Dáta |
|---|---|
| 1 | ... |
| 10 | ... |
| 11 | ... |
| 12 | ... |
| 17 | ... |
| 18 | ... |
| 19 | ... |
| 20 | ... |
| 124 | ... |
Pri pokuse o stránkovanie, napríklad po 5 záznamov podľa ID, sa stroskotá na tom, že nikdy dopredu nevieme povedať, akú hodnotu ID bude mať nasledujúci záznam:
SELECT * FROM tabulka WHERE ID<=5 LIMIT 5;
Pričom často sa používa na stránkovanie práve klauzula WHERE ID<=5,
kde sa podmieňujúca hodnota ID nejakým zázračným spôsobom vypočítava. Výsledok nemusí
byť dvakrát potešujúci:
| ID | Dáta |
|---|---|
| 1 | ... |
Pri tom je to jednoduché zo samotnej podstaty PostgreSQL:
SELECT * FROM tabulka LIMIT 5 OFFSET 0;
Pre ďalších päť záznamov by to bolo:
SELECT * FROM tabulka LIMIT 5 OFFSET 5;
Klauzula OFFSET nerobí nič iné, ako to, že povie príkazu
SELECT nech vyberie záznamy s tým, že preskočí udaný počet.
Teda OFFSET 0 preskočí nula záznamov, OFFSET 5
preskočí 5 záznamov atď. Klauzulou LIMIT už len obmedzíme
počet záznamov, ktoré sa majú vypísať.
V MySQL jazyku sa nepoužíva klauzula OFFSET, ale
len LIMIT. A to takto (pre prvých päť záznamov):
SELECT * FROM tabulka LIMIT 0,5;
Pre nasledujúcich päť znáznamov:
SELECT * FROM tabulka LIMIT 5,5;
A tak ďalej.
Stránkovanie databázových dát je jednoduchšie, ako sa na prvý pohľad zdá. Príjemné pretáčanie listov preto prajem.
Páčil sa článok? Hlasuj kliknutím tu
11. máj 2008, 13:36 Web |
Možnosť komentovať bola zrušená. Viac sa dozviete v článku o tom, prečo som tak učinil.

Volám sa Peter Druska a nehanbím sa za svoj názor.
Kúpte si odkaz na blogu Sieťook: ScratchBack – novší
Účinná metóda učenia sa: 10+3 zrnenie – starší
![]()
Podpor aj Ty Sieťook. Ak ho čítaš rád, kliknutím ho odporučíš väčšiemu množstvu ľudí.
ISSN 1337-5490
|
Sieťook píše Peter Druska
|
RSS kŕmenie
|
Inzercia a reklama
|
Prehlásenie o prístupnosti
|
Pravidlá tvorby prístupných webových stránok
|
Pravidlá diskutovania
|
Privacy (EN)
Zaslaním komentára pod ľubovoľný článok súhlasíš s jeho zverejnením bez akejkoľvek odmeny zo strany majiteľa stránok a s plným uvoľnením v prospech webu Sieťook. V prípade nevhodnosti môže byť komentár zrušený, či skrátený.
Obsah Sieťooku je majetkom jeho majiteľa.