Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] Sortowanie danych, bez względu na wielkość liter
harbii
post
Post #1





Grupa: Zarejestrowani
Postów: 311
Pomógł: 1
Dołączył: 27.05.2006

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


Czy da się jakoś posortować wyciągnięte dane alfabetycznie ale tak aby nie brało pod uwagę czy to duża czy mała litera?

mam tak:
  1. <?php
  2. "SELECT * FROM table ORDER BY `nazwa` ASC ";
  3. ?>


i sortuje tak
Allegro
Books
Czytaj
Zegarki
e-Cyfrowe
eBay
inBook
Świat Książki

a powinno:
Allegro
Books
Czytaj
e-Cyfrowe
ebay
Świat Książki
Zegarki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 19)
nevt
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


jak są kodowane dane w tym polu? UTF8? jeżli tak, to spróbuj
  1. SELECT * FROM tabela ORDER BY pole COLLATE 'utf8_polish_ci';
Go to the top of the page
+Quote Post
mpps
post
Post #3





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


prawdopodobny problem, to polskie litery (ś).

rozwiązania:
1. w tabeli dodaj pole np. 'lp', gdzie sam będziesz ustalał kolejność i sortuj po tym polu.
2. zamieniaj polskie znaki na ich odpowiedniki bez ogonków z wykorzystaniem ereg_replace lub str_replace i dopiero wtedy sortuj w zapytaniu.

pzdr
marcin

Ten post edytował mpps 18.05.2008, 12:23:44
Go to the top of the page
+Quote Post
harbii
post
Post #4





Grupa: Zarejestrowani
Postów: 311
Pomógł: 1
Dołączył: 27.05.2006

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


ok. ale mi nie chodzi o polskie znaki (to był tylko przykład)

chodzi o to że najpierw sortują sie wyrazy z wielkiej litery a potem z małej, a ja chciałbym aby sortowało sie bez względu na wielkość liter
Go to the top of the page
+Quote Post
mpps
post
Post #5





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


strtolower i wtedy dopiero sortuj
Go to the top of the page
+Quote Post
harbii
post
Post #6





Grupa: Zarejestrowani
Postów: 311
Pomógł: 1
Dołączył: 27.05.2006

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


a można jakimś zapytaniem zmienić wszystkie nazwy z tabeli nazwa na duże znaki? jakim?
Go to the top of the page
+Quote Post
mpps
post
Post #7





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


strtoupper
Go to the top of the page
+Quote Post
piotrooo89
post
Post #8


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




możesz zmieniać też pierwsze litery danych słow.

pierwsze na duże
pierwsze na małe
Go to the top of the page
+Quote Post
harbii
post
Post #9





Grupa: Zarejestrowani
Postów: 311
Pomógł: 1
Dołączył: 27.05.2006

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


dobre

ale to tylko zmienia wyświetlanie a mi chodzi aby zmieniło samo się w bazie skoro nie da się posortować z różnymi literkami
Go to the top of the page
+Quote Post
piotrooo89
post
Post #10


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




funkcja upper na duże i lower na małe...
Go to the top of the page
+Quote Post
mpps
post
Post #11





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


'samo' w bazie się nie zmieni (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
napisz sobie skrypt w PHP, który pobierze Ci dane z bazy, zamieni je wg potrzeb i zapisze spowrotem w bazie.
oczywiście jeśli ilość danych w bazie jest tego warta...
Go to the top of the page
+Quote Post
piotrooo89
post
Post #12


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




masz manuala:

upper
lower

Ten post edytował piotrooo89 18.05.2008, 13:15:06
Go to the top of the page
+Quote Post
harbii
post
Post #13





Grupa: Zarejestrowani
Postów: 311
Pomógł: 1
Dołączył: 27.05.2006

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


a jak poprawnie użyć strtoupper w
  1. <?php
  2. "SELECT * FROM table ORDER BY `nazwa` ASC ";
  3. ?>
?
żeby sortowało juz dużymi
Go to the top of the page
+Quote Post
piotrooo89
post
Post #14


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




mysle że tak:

  1. <?php
  2. $sql = "SELECT UPPER(1 kolumna), UPPER(2 kolumna), UPPER(3 kolumna) FROM table ORDER BY nazwa ASC";
  3. ?>
Go to the top of the page
+Quote Post
ActivePlayer
post
Post #15





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


chyba raczej tak:
  1. <?php
  2. "SELECT * FROM table ORDER BY UPPER(nazwa) ASC ";
  3. ?>
Go to the top of the page
+Quote Post
harbii
post
Post #16





Grupa: Zarejestrowani
Postów: 311
Pomógł: 1
Dołączył: 27.05.2006

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


@ActivePlayer - dzięki pomogło
Go to the top of the page
+Quote Post
mpps
post
Post #17





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


a dla mnie temat pozostaje...
po co obciążać serwer dodatkowym zadaniem?
Go to the top of the page
+Quote Post
piotrooo89
post
Post #18


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




Cytat(mpps @ 19.05.2008, 01:33:28 ) *
a dla mnie temat pozostaje...
po co obciążać serwer dodatkowym zadaniem?


może po to aby uzyskać oczekiwany efekt?
Go to the top of the page
+Quote Post
mpps
post
Post #19





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


Cytat(piotrooo89 @ 19.05.2008, 07:46:40 ) *
może po to aby uzyskać oczekiwany efekt?


nie do końca się uzyska zamierzony efekt, ponieważ dalej pozostanie sprawa polskich znaków diakrytycznych.
samo UPPER() posortuje, ale nazwy z polskimi znakami na początku będą na końcu, zamiast w szeregu zgodnie z (polskim) alfabetem...
nie sprawdzałem, ale mam wrażenie, że się nie mylę
Go to the top of the page
+Quote Post
nevt
post
Post #20





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


oślepli chyba wszyscy w tej dyskusji. rozwiązanie stoi ja wół, podane na tacy w moim poprzednim poście - bezpośrednio pod pytaniem...

chociaż najwłaściwsze rozwiązanie, to ustawić dla tego pola w tabeli (np. przez phpMyAdmin) Column Charset: utf8, Column Collate: utf8_polish_ci. wtedy zwykły SELCET z ORDER BY zwróci odpowiednio poustawiane wiersze ... wystarczy również samo ustawienie Column Charset, bo Collate można już sobie zadawać bezpośrednio w SQL jak pokazałem wcześniej (ale jest to mniej wydajne rozwiązanie, jeżeli mamy na tym polu indeks...)

ABSOLUTNIE NIE MA POTRZEBY robienia jakichś dziwnych uników z UPPER() LOWER() czy innymi funkcjami. po to wprowadzono Charset UTF8 oraz Collation m.in. polish_ci (ci to znaczy case insensitive - bez względu na wielkość liter...) żeby można było poprawnie sortować dane w języku polskim (oraz wielu innych).

pozdrawiam i życzę powodzenia.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 02:05