Zajimavá úloha v MYSQL

/ Blog / MYSQL / Zajimavá úloha v MYSQL

Publikováno v sekci MYSQL v 2. 7. 2009 - 18:44

Jeden z mých dobrých přátel a kolegů z oboru potřeboval vyřešit zdánlivě jednoduchou úlohu. Dostal tabulku s daty, kde v jednom sloupečku bylo ID (autoincrement) a v druhém textové a číselné hodnoty ( kladná i záporná čísla). Výstupem mělo být "lidské seřazení".

Zkoušel jsem všechny možné funkce MYSQL, nic nefungovalo tak jak jsem potřeboval a kdyz jsem seřadil část tak jak jsem chtěl, druhá část byla třeba obráceně. Nakonec se mi to podařilo tímto dotazem.
1: SELECT id_hodnota, nazev_cz, CASE WHEN LEFT( nazev_cz, 1 ) = '-' THEN 1 WHEN nazev_cz REGEXP '^[0-9]' OR LEFT( nazev_cz, 1 ) = '+' THEN 2 ELSE 3 END AS own, ABS( nazev_cz ) AS _abs FROM sablony_hodnoty_copy ORDER BY own ASC , IF( own =1, _abs, NULL ) DESC , IF( own =2, _abs, NULL ) ASC , nazev_cz ASC
Řekl bych, že zajímavá věc na celém dotazu se skrývá v ORDER BY. Přikládám zároveň i dump tabulky, kdyby si to někdo chtěl zkusit a kdyby někdo přišel na lepší řešení, sem s ním, zajímá mě to. Tento dotaz bude fungovat jen v MYSQL 5+. Zároveň není vhodný na tabulku s větším počtem dat ( toto nebyl můj případ ) [link]sablony_hodnoty_copy.zip[/link]

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 (0x)

    Nejsou tu žádné komentáře


    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