Mám problém so zoradením s diakritikou, napríklad mám pole
janko, stano, šimon, zdeno, ale keď dám príkaz sort, tak mi to zoradí takto:
janko, stano, zdeno, šimon,
čo sa tíka výpisu z databáze s príkazom ORDER BY... to som ešte neskúšal, avšak, ja potrebujem pole zoradiť ešte pred vložením do databáze.
našiel som tu aj jeden taký príspevok, ale riešenie tam nebolo.
http://www.webzdarma.cz/forum/read.php?f=5&i=171&t=163
Tak mi prosím poraďte ako to ošetriť.
Z toho prispevku:
'Data do databaze ukladam v kodovani win-1250'
O tve databazi nevime nic. Zkus pustit php adnima a proved export struktury tabulky, pak si zjisti, jake mas nastaveni pripojeni k databazi a do jakeho kodovani ukladas.
'Správný řazení jsem už vyřešil ... nastavením proměný 'character_set' na spravny kodovani ... 'win1250' ...'
Vzdyt tam o reseni pise. Mel spatne nastavene kodovani tabulky/sloupce. Pak se nediv, ze to neumi seradit. To je jeden z duvodu, proc se tam vubec kodovani nastavuje.
'* Proc je 'character_set' nastavena na WZ prave na 'czech' ?
* A muzu si to nejak uzivatelsky zmenit v PHP ?'
1. ? charset typu czech neexistuje
2. Samozrejme si urcita kodovani muze zmenit. mysql_query a poslat do MYSQL prikaz ke zmene. Nebo v phpadminu vyklikat.
To tema, na ktere odkazujes, nechapu. On tam pise, ze si kodovani spravil a pak se pta, jak to muze zmenit. Nastavil to nebo ne?
Zaklad v PHP je mit:
@ini_set('error_reporting',E_ALL);
@ini_set("display_errors","on");
error_reporting(E_ALL);
Zmena kodovani SQL:
// sql query
function sq($query,$text='') {global $SQL; $SQL['dotazy']+=1; $res = mysql_query($query) or die("<hr>MySQL Err".$text.": $query<hr>".mysql_error()); return $res;} //debug mode
$SQLserver = mysql_connect($SQL['host'],$SQL['user'],$SQL['psw']) or die ("Err: connect DB server!" . mysql_error());
$SQLdb = mysql_select_db($SQL['dbname'],$SQLserver) or die ("Err: connect DB!" . mysql_error());
//sq("SET NAMES 'cp1250'",'charset DB!');
Dalsi moznosti zmeny kodovani SQL:
http://www.volny.cz/peter.mlich/www.htm#msub12
sql charset odkazy
zmena kodovani HTML
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250"/>
zmena kodovani PHP
$kodovani = 'ISO-8859-1';
header('Content-Type: text/html;charset='.$kodovani);
http://forum.builder.cz/read.php?20,1777181,1777270,quote=1
SET collation_connection=1250_czech_cs
Seradit pole pred ulozenim do DB? Tak to si ho snad seradis uz ve skritpu nez vytvoris dotaz,ne? :)
Spis by me zajimalo, naco radis pole pred ulozenim do DB (pokud bude kazdy prvek pole na svem radku v tabulce), kdyz ti to mysql stejne rozhazi? :)
Aha, řadit před uložením. Nelze, je prasárna mít textový primární klíč (jde to vůbec?).
sorac, asi som to mal zapisat do PHP fora, ale?!
vystup z databázi mi radí korektne, avšak, nemám primárny ľúč názov, aj keď aj to je možné, ale išlo mi len o to, že mám veľmi špecifický spôsob kategórií a ak si ich zoradím pred vpísaním do databázi, tak ich nemusím radiť pomocou ORDER BY a tým pádom ušetrím prostriedky databázy pri generovaní.
Je predsa oveľa jednoduchšie zoradiť raz, ako radiť zakaždým, preto ma zaujíma ako ošetriť pred vkladaním do databáze.
Ale je to príspevok skôr do PHP fóra. lebo to chcem urobiť pomocou príkazu SORT v PHP, myslím že ale treba previesť písmená asi na nejakú inú formu, ktorá je zoradená správne a tým pádom bude mať príkaz SORT jednoduchú úlohu, ale neviem ako previesť klasické písmo na iné, vlastne neviem o tom nič.
Vsechny sorty v php imho radi podle ordinalni hodnoty znaku, takze české znaky budou až někde na konci (i když novější než 4.4.0 by melo umet s setlocale() radit i cesky..).
Divim se, ze ti data zustavaji v databazi strukturovana tak, jak je zadas.. (pokud nepouzivas zadne indexy..) - osobne se mi nikdy nestalo, ze bych dostal data z databaze tak, jak jsem je tam nastrkal :)
No super, tak nakoniec som na to prišiel!
Takto sa dá zoradiť aj bežné pole v PHP.
$a = array ('a', 'A', 'ä', 'Ä', 'b', 'B');
setlocale (LC_COLLATE, 'sk_SK');
usort ($a, 'strcoll');
Pomohli mi vaše odkazy a keď som našiel toto:
http://www.bigwebmaster.com/General/Howtos/Slovak-HOWTO/locales.html
Mimochodom samozrejme ze pouzivam indexi, ale mam rad vo vsetkom (v pocitaci) poriadok, tak nech je to aj v tej databaze pekne, ak sa to da.
goodstyle.sk (promotion.wz.cz)
Ja bych to resil pres SQL
SQL zapis
SQL nacti a serad
SQL prepis serazenym
Jednoduche, nemusis vypisovat ceske znaky. Mimo to si myslim, ze pri nastavenem spravnem header(), mozna php_ini by se to melo radit dobre bez tech fint.