Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sortowanie polskich liter za pomocą ORDER BY
Forum PHP.pl > Forum > Bazy danych
php programmer
Witam mam taki problem.

Jest baza (dokładnie to postgres, ale myśle, że jest to ogólny problem dla baz)
W bazie są wpisy po polsku, więc zawierają ogonki (ęą itp)
Gdy użyję frazy ORDER BY to owszem sortuje wszystko,
ale nie uzwględnia już ogonków (daje je na koniec).
Czy jest jakaś metoda rozwiązania tego już po stronie bazy danych?

ps. Próbowałem to wyszukać na tym forum, ale ta wyszukiwarka szuka po wszystkich działach, a nie tylko w tym dziale w którym sie jest
mhs
co do wyszukiwarki to mozesz wyszukiwac w okreslonych forach; zobacz na "Gdzie szukać?"


http://forum.php.pl/index.php?act=Search&f=11
mike
Musisz po ustawieniu zmiennych LC_xxx
Cytat
export LC_COLLATE=pl_PL
export LC_CTYPE=pl_PL

zrobić na nowo initdb.
Postgres zapamiętuje ustawienia locale (dokładniej: tylko
LC_CTYPE i LC_COLLAYE) w chwili tworzenia "lokalizacji" i potem
ignoruje ustawienia tych zmiennych. Co do szczegółów -- poczytaj
dokumentację Postgresa (rozdział "Localization")
php programmer
Cytat(mike_mech @ 2005-09-12 08:17:12)
zrobić na nowo initdb.

Administrator bazy, którą używam,
napisał mi że nie może tego zrobić,
poniważ wiąże się to z wykasowaniem wszytkich baz.
mike
http://www.dbf.pl/faq/tresc.html?rozdzial=10
Temat 10.14 Co i jak z polskimi literami?.

Jeżeli admin nie chce zrobić tego o co go prosisz, zapytaj go o problem. Może poradzi inne rozwiązanie.
php programmer
Wymyśliłem już swoje rozwiązanie.
Otóż robie w tabeli dodatkową kolumnę o nazwie sort.
Na poziome php, pobieram kolumnę, którą chcę posortować,
zamieniam ogonki na odpowiadające im litery, ale dodatkowo
dołączam przy tej podmianie 'zzz', gdybym tego nie dołączył
litera Ś miała by takie same uprawnienia jak S, a tak to jest "gorsza".
Otrzymaną podmianę wrzucam do kolumny sort, a w skrypcie wyświetlającym
sortuje już wedłu tej nowej kolumny. Dla zainteresowanych problemem podaje kod:

  1. <?php
  2.  
  3. $query = "SELECT * FROM osoby";
  4. $result = pg_query($query) or die(pg_last_error());
  5.  
  6. while ($row = pg_fetch_array($result)){
  7.        $sort = $row['imie_nazwisko'];
  8.  
  9.        $ogonki = 'EÓĄŚŁŻŹĆŃęóąśłżźćń';
  10.        $zwykle = 'EOASLZXCNeoaslzxcn';
  11.  
  12.        for ($i=0;$i<18;$i++) 
  13.              $sort = str_replace($ogonki[$i],$zwykle[$i].'zzz',$sort);
  14.  
  15.        $query = "UPDATE osoby SET sort='$sort' WHERE id=".$row['id'];
  16.        $r = pg_query($query);
  17.        $err =  pg_last_error();
  18.        if (strlen($err)>0) echo "<BR>$err<BR>$query<BR>";
  19.        }
  20.  
  21.  
  22. ?>


Oczywiscie to jest kod poprawiający całą baze,
przy dodawaniu jedengo rekordu
nalezało by dodwać kolumnę sort tylko dla dodawanego rekordu.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.