Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL][PHP]Lista segregowana
kamilos809
post
Post #1





Grupa: Zarejestrowani
Postów: 165
Pomógł: 3
Dołączył: 2.04.2010

Ostrzeżenie: (10%)
X----


Hejka!
Może to głupie pytanie(dlatego przedszkole)... Dlaczego jak dam DESC to lista niby się segreguje, ale dajmy na to mam
100
200
150
0
30
to one zamiast ułożyć sie malejąco
200,150,100,30,0
to ustawiają się
30,200,150,100,0
Wie może ktoś dlaczego jest tak a nie inaczej? i co ważniejsze... jak temu zaradzić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Case
post
Post #2





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 30.08.2012

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


Stringi (varchar) są sortowane na podstawie kolejnych znaków.

Podałeś zestaw:
100
200
150
0
30

Sortowanie podanych przez Ciebie stringów (to istotne, że to nie liczby) przebiega więc następująco:
- bierzemy pierwszy znak każdego ze stringu, dostaniemy:
100
200
150
0
30
- ustawiamy je w kolejności malejącej (tak jak chciałeś w przykładzie):
30
200
100
150
0
- tam gdzie pierwszy znak jest taki sam, bierzemy do porównania drugi znak, czyli:
30
200
100
150
0
- piątka jest większa od zera, zamieniamy dwa ciągi znaków miejscami i kończymy, dając w wyniku
30
200
150
100
0

Gdyby były to liczby, a nie ciągi znaków sortowanie zadziałałoby tak jak się tego spodziewałeś.
To czego tutaj potrzebujesz to tzw. sortowanie naturalne, które napotykając na liczbę bierze ją całą pod uwagę, a nie tylko kolejny jej znak.
Niestety, mogę się mylić, ale z tego co się orientuję MySQL nie ma sortowania naturalnego.

Co możesz zrobić... jeśli przechowujesz w kolumnie tylko liczby, to zamień ją koniecznie na typ liczbowy. Nie dość, że sortowanie działa, nie dość, że szybciej, to jeszcze takie liczby mniej miejsca zajmują.
Go to the top of the page
+Quote Post

Posty w temacie


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: 6.10.2025 - 04:08