PDA

Pogčedajte punu verziju : Sortiranje po UTF-8, ћирилица + latinica


nn.nn
13. 09. 2007., 15:41
Ima li neka baza koja može da sortira UTF-8 tekst na srpskom pisan mešovito, ćirilicom i latinicom, tako da u rezultatu ne pravi razliku između ta dva pisma, odnosno da č bude pored ч, ć pored ћ itd?

Kako to ide sa malim i velikim slovima?

Da li onda može da se bira između azbučnog i abecednog sortiranja?

Ako ne može tako, da li je neko ovo rešio na drugi način?

McChoban
25. 09. 2007., 00:12
Nisam toliki znalac za baze, mozda je i moguce, ali moje resenje bi bilo da pokupim podatke pa ih sortiram naknadno.

Primeni neki sort algoritam, ali mu stavi komparator koji ce da koristi string za poredjenje
tipa, ako je php, postoji funkcija usort();




// prvo napravimo komparator, koji vraca 1 ako je prvi veci od drugog, -1 ako je manji, i 0 ako su jednaki.

function komparator($str1, $str2) {
if ($str1 == $str2) {
return 0;
} // da skratimo posao, prvo provedimo dal' su jednaki

$cmp = "aаbбvвgгdдđђ...."; // itd - string koji sadrzi poredjana cir. i lat. slova.

$len1 = strlen($str1); $len2 = strlen($str2);
$len = ($len1 <= $len2) ? $len1 : $len2; // duzina petlje jednaka duzini kraceg stringa

for ($i = 0; $i < $len; $i++) {
$chr1 = strtolower($str1[$i]); // uzimamo i-ti karakter stringa
$chr2 = strtolower($str2[$i]);
if (strpos($cmp, $chr1) > strpos($cmp, chr2)) {
return 1;
} else if (strpos($cmp, $chr1) < strpos($cmp, chr2)) {
return -1;
}
}

// ako su stringovi identicni do duzine kraceg, onda smo se nasli ovde

if ($len1 > $len2) {
return 1;
} else if ($len2 > $len1) {
return -1;
}

// ako smo se nasli ovde, onda su identicni i jednakih duzina
// pa posto smo to proverili na pocetku, to znaci da nikako ne bi trebalo ovde da se nadjemo :)

return 0;
}

// sad pozovemo usort na nizu koji sortiramo, i prosledimo naziv komparatora kao argument

usort($array, "komparator");



U slucaju jave je slicno, imas Collections.sort() i napravis mu comparator, slican ovom iz php-a samo se malo drugacije operise sa stringovima.

Naravno ako neko ima SQL-only resenje, bio bih odusevljen da ga vidim :1094:

Pedja
25. 09. 2007., 09:48
Ima li neka baza koja može da sortira UTF-8 tekst na srpskom pisan mešovito, ćirilicom i latinicom, tako da u rezultatu ne pravi razliku između ta dva pisma, odnosno da č bude pored ч, ć pored ћ itd?

Moze to i MySQL samo moras da isprogramiras odgovarajuci modul i iskompajliras ga u MySQL...

nn.nn
25. 09. 2007., 12:48
Moze to i MySQL samo moras da isprogramiras odgovarajuci modul i iskompajliras ga u MySQL...

Znači, nema ništa gotovo? Našao sam negde izjavu Siniše Milovanovića (MySQL AB) u kojoj pominje da su Hrvati uradili odličan modul za tu namenu, samo što tu nema pola mojih zahteva - ćirilica.

Pedja
26. 09. 2007., 00:00
Mozda su uradili, ali meni nije uspelo ni latinicu da sortira kako valja :)