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

Publikováno v sekci MYSQL v Sobotu 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:

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:

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:

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

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

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.

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 :-))

1 komentář « Zpět


Komentáře

21.03.09 01:30
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).

Přidat komentář

Nový vzkaz

* Tato pole jsou povinná, [smajlíci]

  • 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, nebo jej vložte mezi značky [code] [/code]
  • vulgární, rasistické či jinak nepřípustné komentáře budou smazány


Hlavní navigace


[ ↑ k obsahu ↑ ]