Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL][PHP]Lista segregowana
Forum PHP.pl > Forum > Przedszkole
kamilos809
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ć?
Pawel_W
typ pola jest na pewno numeryczny? wink.gif
kamilos809
hmm... wszystkie rekordy są numeryczne, a pole jest varchar bodajże.
Pawel_W
no więc właśnie smile.gif skoro dajesz do zrozumienia bazie danych, że wynik jest typu varchar, to nie dziw się, że sortuje rekordy jak zwykły tekst smile.gif zmień typ na jakiś liczbowy, odpowiedni dla danych
Case
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ą.
kamilos809
może to głupie pytanie, ale typ liczbowy, to było INT? czy coś w ten deseń? bo szczerze żadko tego używam...
Szymciosek
Tak
INT - integer
kamilos809
Dzięki bardzo biggrin.gif
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.