Sieťook

Bez servítky na klávesnici

Budete mať radosť zo života
 

Stránkovanie dát použijúc PostgreSQL/MySQL: SELECT, LIMIT, OFFSET

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ť.

Použitie v MySQL

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.

Zhrnutie

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 pošli na vybrali.sme.sk

11. máj 2008, 13:36 Web |

Komentáre k prečítanému článku – Stránkovanie dát použijúc PostgreSQL/MySQL: SELECT, LIMIT, OFFSET

Možnosť komentovať bola zrušená. Viac sa dozviete v článku o tom, prečo som tak učinil.

Peter Druska
Volám sa Peter Druska a nehanbím sa za svoj názor.

Listuj článkami

Kúpte si odkaz na blogu Sieťook: ScratchBack – novší
Účinná metóda učenia sa: 10+3 zrnenie – starší

Výborné čítanie

Dobré knihy

Počúvam rád





Quantcast

Kategórie

Surf.sk

Podpor aj Ty Sieťook. Ak ho čítaš rád, kliknutím ho odporučíš väčšiemu množstvu ľudí.

Čítanie

Vyhľadaj



Štatistiky

TOPlist

Priania

Doplňujúce informácie

ISSN 1337-5490 | Sieťook píše Peter Druska | RSS 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.