spájame
slovenskú
IT komunitu
pridaj sa
Registrácia · Login
Roman Hraška 11.1.2012, článok je súčasťou seriálu Yablkov TurboTip [HD]
Hodnoť článok:
1 0

Videocast: TurboTip 10 - MySQL výber predchádzajúceho a nasledovného záznamu v jednom query

Dnes SELECTnem, potom SELECTnem znova a potom SELECTnem zo SELECTov, pretože to ide.

BEGINNERS ONLY ★

720p, pretože menej smrdí.

TurboTip 10 - MySQL výber predchádzajúceho a nasledovného záznamu v 1 query

kuk na príklad »

Čo sa snažím povedať je, že sa dá spraviť toto:

SELECT
(SELECT url FROM the_stuff WHERE id < 8 ORDER BY id DESC LIMIT 1) AS prev,
(SELECT url FROM the_stuff WHERE id > 8 ORDER BY id ASC  LIMIT 1) AS next

A to je celé. Ale prišli by ste o historku s hovnocucom.

ak ma chceš podporiť, behni na yablko.sk a možno spravím nový seriál či dva:)

Sledujte yablka skrz twitter - @yablko - pre informácie o nových videách, humor, ktorý baví len jeho a občasné nervové zrútenie.

* * *

Páči sa ti Yablkov TurboTip?

Roman Hraška Roman Hraška

Robí s webom a občas o tom napíše. Nekomplikuje jednoduché a snaží sa neznieť príliš dôležito, pretože nie je. Medzi jeho záľuby patria jeho záľuby a tautológia. Nájdeš ho na brm.sk a obsmŕda aj na twitteri, ako @yablko.

Skús moje seriály: Nauč sa jQuery, Nauč sa CodeIgniter a Yablkov TurboTip. Ak ma chceš dohnať k tvorbe nových seriálov, behni na yablko.sk :)


Hodnoť článok:
1 0


6 komentárov k článku:

Komentovať môžu iba prihlásení

Zaregistruj sa cez bezplatnú registráciu alebo použi login cez Facebook (FB Connect)

Prihlás sa tu, ak už máš profil na Zajtra.sk:


Zabudol som heslo

1 0 Peter Payter Gašparík 29.8.2012 19:17:47
@Roland Dobos to čo si napísal, že tvoj spôsob je rýchlejší je hlúposť, aspoň podľa mojich vedomostí je potrebné sa UNION vyhýbať a to z toho dôvodu, že ono musí najprv spraviť jedno query, potom druhé a tieto dva výsledky na pozadí musí spojiť do temporarnej tabulky... ďalej je fakt nepraktické aby si mal výsledok vo viacerých riadkoch hlavne pri použití nejakého ORM... jednoducho Romanove riešenie je rýchlejšie a praktickejšie oproti tvojmu
0 1 Roland Dobos 30.4.2012 16:05:40
no ja ti ušporím ešte jeden query - ten tretí, kde SELECTneš získané hodnoty ;D Ako? UNION!

(SELECT url AS prev, 0 AS next FROM the_stuff WHERE id < 8 ORDER BY id DESC LIMIT 1)
UNION
(SELECT 0 AS prev, url AS next FROM the_stuff WHERE id > 8 ORDER BY id ASC LIMIT 1)

v tomto prípade však musíme pristupovať k výsledku iným spôsobom, keďže ide o 2 riadky. Ja som zachoval možnosť prístupu k dátam ako prev a next, ale keďže budeme musieť vyberať z 2 riadkov, je to úplne zbytočné vyberať v oboch prípadoch aj nepravdu ako druhú hodnotu, čiže poďme si tento SELECT ešte trocha zjednodušiť ;P

(SELECT url FROM the_stuff WHERE id < 8 ORDER BY id DESC LIMIT 1)
UNION
(SELECT url FROM the_stuff WHERE id > 8 ORDER BY id ASC LIMIT 1)

a potom

$prev = mysql_result($SQL,0);
$next = mysql_result($SQL,1);

s tým, že v $SQL je uložený odpoveď servera na to query

BTW - tu je to už ozaj extrémne zjednodušené - UNION ti 2 "rovnaké" výsledky len spojí, už nič z tabuliek nevyberá a to = rýchlejšej aplikácií ;)
0 0 Andrej Badin 13.1.2012 21:17:04
@Roman Hraška: predstav si hlasovanie, skús niekde JOINuť túto tabuľku "otázok" s tabuľkou "hlasov", napočítať poradie zvoleného hlasu, a potom vybrať predchádzajúci a nasledujúci prvok.
Keď som videl názov článku a tvoje meno, popravde čakal som viac :P To čo si postol je nice, a zabraňuje to výberu "neexistujúcich" záznamov, ale je to malá výzva :)
0 0 Matúš Jančík 11.1.2012 20:57:14
cize mozes rovno jednym selectom vytiahnut vsetko (cely stuff :) a url pre tie okolo) ked tak premyslam

SELECT *,
(SELECT url FROM the_stuff WHERE id < s.id ORDER BY id DESC LIMIT 1) AS prev,
(SELECT url FROM the_stuff WHERE id > s.id ORDER BY id ASC LIMIT 1) AS next
FROM the_stuff s WHERE s.id = %ID%
0 0 Roman Hraška 11.1.2012 16:42:41
čo ak vymažem riadok s id=7 ? vtedy chcem, aby to skočilo na 6, nie neexistujúcu sedmičku
0 0 Michal Chovanec 11.1.2012 16:33:51
stačilo by
SELECT
(SELECT url FROM the_stuff WHERE id = 8-1) AS prev,
(SELECT url FROM the_stuff WHERE id = 8+1) AS next
Zajtra.sk > Programovanie > Seriály > Videocast: TurboTip 10 - MySQL výber predchádzajúceho a nasledovného záznamu v jednom query


Kritika

Vieš ako robiť veci lepšie? Pomôž našim odvážnejším členom a skritizuj im projekty!

Reklama

Seriály zo Zajtra.sk

Reklama