Publikováno v sekci MYSQL v
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]
Nejsou tu žádné komentáře