Speciální řazení dat v databázi MySQL

/ Blog / MYSQL / Speciální řazení dat v databázi MySQL

Publikováno v sekci MYSQL v 21. 7. 2007 - 12:26

Pokud potřebujeme seřadit data z databáze, můžeme použit klasický způsob ORDER BY a směr. Leckdy si s tímto způsobem ale nevystačíme ...

Máme například tabulku státy (staty). Tabulka obsahuje tyto státy - Anglie, Belgie, Dánsko, Francie, Portugalsko) Základní dotaz , který vypíše zeme vzestupně vypadá takto:

1: SELECT * FROM staty ORDER stat BY ASC
Výstup bude bude Anglie, Belgie, Dánsko, Francie, Portugalsko

Pokud potřebujeme státy obrácene použijeme dotaz:

1: SELECT * FROM staty ORDER BY stat DESC
Výstup bude obrácený. Portugalsko, Francie ...

Na tom není nic neobvyklého, je to základní SQL příkaz k řazení.
Co kdybychom potřebovali upřednostnit nějakou zemi a zařadit ji do výpisu na první místo?

Je to snadné. Dotaz bude vypadat takto:

1: SELECT * FROM staty ORDER BY (stat='Dánsko') DESC, stat ASC
Na první místo se zařadí Dánsko a poté již zeme v abecedním pořadí (Anglie, Belgie ...)

Pokud bychom chtěli mít Dánsko jako posledí použijeme příkaz

1: SELECT * FROM staty ORDER BY (stat='Dánsko') ASC, stat ASC
Pokud bychom chtěli státy seřadit podle toho kde leží čili

Severní Evropa =>Dánsko Západní Evropa =>Anglie, Belgie, Francie Jižní Evropa => Portugalsko Použijeme klauzuli ORDER BY FIELD

1: SELECT * FROM staty ORDER BY FIELD (stat, 'Dánsko', 'Anglie', 'Belgie', 'Francie', 'Portugalsko')
A země se nám seřadí v pořadí v jakém jsme je uvedli v klauzuli FIELD.

Poslední fintou, kterou Vám dnes ukáži je s pomocí podminek přímo v SQL.
Chceme na první místě Francii, Portugalsko, na dalších ostatní země podle abecedy.

1: SELECT *, CASE stat WHEN 'Francie' THEN 1 WHEN 'Portugalsko' THEN 1 ELSE 2 END AS seradPodleMe FROM staty ORDER BY seradPodleMe ASC, stat ASC
Využijeme větvení CASE (známe z PHP) a přiřadíme dvoum státům číslo 1 a všem ostatním číslo 2 a seřadíme podle tohoto speciálního sloupce, a aby se ostatní státy seřadily sestupně, přidáme do ORDER BY ješte podmínku podle jmena státu (stat ASC)

To je pro dnešek a po dlouhé době a pro delší dobu opět vše :-))

Kategorie

  • Osobní názory - 1x
  • PHP - 9x
  • MYSQL - 4x
  • CSS - 7x
  • jQuery - 3x
  • Sociální síť - 1x
  • Nette - 5x
  • Tipy & triky - 3x
  • Twitter Bootstrap - 1x
  • Týdenní tipy a novinky - 4x
  • SCSS - 1x
  • GIT - 1x
  • Gulp - 1x

  • Komentáře (1x)

    Problém s dotazem "ORDER BY (stat='Dánsko'), stat" je ten, že se pro třídění nepoužije index. Pokud je záznamů hodně a použití indexu je tedy nutné, tak je možné položit dotazy dva - jeden "WHERE stat = 'Dánsko'" a druhý "ORDER BY stat" (z něj je potřeba Dánsko ještě vyhodit).

    Vložit nový komentář


    • na jiné komentáře odkazujte pomocí odkazu reagovat
    • vaše IP adresa bude zaznamenána
    • používají se gravatary
    • můžeme si tykat
    • HTML tagy vypnuty. PHP kód se také neprovede. Pokud potřebuju přiložit ukázku vašeho kódu, použijete službu pastebin
    • vulgární, rasistické či jinak nepřípustné komentáře budou smazány