Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> sortowanie polskich liter za pomocą ORDER BY
php programmer
post
Post #1





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
mhs
post
Post #2





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

Ostrzeżenie: (0%)
-----


co do wyszukiwarki to mozesz wyszukiwac w okreslonych forach; zobacz na "Gdzie szukać?"


http://forum.php.pl/index.php?act=Search&f=11
Go to the top of the page
+Quote Post
mike
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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")
Go to the top of the page
+Quote Post
php programmer
post
Post #4





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
mike
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
php programmer
post
Post #6





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 5
Dołączył: 8.11.2004
Skąd: trójmiasto

Ostrzeżenie: (0%)
-----


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.

Ten post edytował php programmer 12.09.2005, 11:34:26
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 04:29