Autor Zpráva
Jack Finger
Profil
Dobrý večer,

chtěl bych se zeptat, zda lze nějak v SQL zapsat následující logiku:

SELECT `column`
FROM `table`
ORDER BY `column` IF(IS_STRING(`column`)){ COLLATE 'utf8_...' } ASC

tzn. když je sloupec column type varchar, char, text a podobné textové řetězce, vypíše se i COLLATE, jinak ne.

Děkuji.
Kajman_
Profil *
Co si nastavit collate pro spojení?
Jack Finger
Profil
Kajman_
Myslíš mysql_query("SET NAMES utf8")?
Mám databázi v UTF8, konkrétně utf8_bin. Po spojení volám výše napsané, vše funguje fajn. Jen bych potřeboval řadit záznamy podle české abecedy. COLLATE jsem si našel, ale mám napsanou třídu pro MySQL, kde potřebuju i univerzálně dosazovat do ORDER BY sloupce. jenže musím nějak rozpoznat, kdyje sloupec typu řetězec, protože pro INT a pod. mi to hází chybu:
COLLATION 'utf8_czech_ci' is not valid for CHARACTER SET 'binary'
Mastodont
Profil
Jack Finger
Tak si do třídy doplň metodu pro rozpoznávání typů sloupců - spustíš "select * from table limit 1", na result použiješ mysql_fetch_fields a prozkoumáš výsledný objekt. Výsledek si někam nakešuj.
Kajman_
Profil *
Měl jsem na mysli něco takového...

SET collation_connection utf8_czech_ci
Jack Finger
Profil
Mastodont
Tvé řešení funguje, taky jsem měl takový mlhavý nápad, ačkoliv jsem neznal funkce, tedy díky za ně! Ale přeci jen, pokud Kajman_ův způsob bude fungovat, asi to je efektivnější. Problém je ovšem v tom, že nefunguje. Asi to bude tím, že jsem nepochopil, co má tento SQL příkaz dělat a z manuálu jsem toho moc nepochopil. Mohl by mi to někdo prosím objasnit? Děkuji.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: