![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 165 Pomógł: 3 Dołączył: 2.04.2010 Ostrzeżenie: (10%) ![]() ![]() |
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ć? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 675 Pomógł: 286 Dołączył: 15.06.2009 Skąd: Wieliczka Ostrzeżenie: (0%) ![]() ![]() |
typ pola jest na pewno numeryczny? (IMG:style_emoticons/default/wink.gif)
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 165 Pomógł: 3 Dołączył: 2.04.2010 Ostrzeżenie: (10%) ![]() ![]() |
hmm... wszystkie rekordy są numeryczne, a pole jest varchar bodajże.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 675 Pomógł: 286 Dołączył: 15.06.2009 Skąd: Wieliczka Ostrzeżenie: (0%) ![]() ![]() |
no więc właśnie (IMG:style_emoticons/default/smile.gif) skoro dajesz do zrozumienia bazie danych, że wynik jest typu varchar, to nie dziw się, że sortuje rekordy jak zwykły tekst (IMG:style_emoticons/default/smile.gif) zmień typ na jakiś liczbowy, odpowiedni dla danych
|
|
|
![]()
Post
#5
|
|
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ą. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 165 Pomógł: 3 Dołączył: 2.04.2010 Ostrzeżenie: (10%) ![]() ![]() |
może to głupie pytanie, ale typ liczbowy, to było INT? czy coś w ten deseń? bo szczerze żadko tego używam...
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 168 Pomógł: 126 Dołączył: 5.02.2010 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
Tak
INT - integer |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 165 Pomógł: 3 Dołączył: 2.04.2010 Ostrzeżenie: (10%) ![]() ![]() |
Dzięki bardzo (IMG:style_emoticons/default/biggrin.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 05:24 |