Publikováno v sekci MYSQL v
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 ASCVý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 DESCVý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 ASCNa 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 ASCPokud 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 ASCVyuž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 :-))