Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Sortowanie string, ale nie alfanumerycznie.. jak ?
iksigrek
post 19.03.2010, 13:02:48
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 19.08.2009

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


W cenniku w tabeli, kolumna zawierająca cenę może zawierać liczbę, bądź inne znaki określające w pewien sposób status ceny. Tak więc kolumna jest typu varchar. Musi to być realizowane w jednej kolumnie, bo tak w tym wypadku jest raczej najwygodniej. Problem pojawia się przy sortowaniu - kiedy chcę sprawdzić która cena jest najniższa. Pole ceny jest typu varchar, więc sortowanie jest alfanumeryczne, czyli cena równa 9 jest za ceną 10 czy np. 89, a powinna być przed. Jak to wykonać w najprostszy sposób, by w momencie sortowania 9 była przed 10 a nie odwrotnie ? Znaki inne niż liczby nie muszą być wtedy oczywiście brane pod uwagę.. chodzi tylko o to, by widzieć najwyższą bądź najniższą cenę na górze..

Nie chcę sortować tego już po wybraniu danych w samym PHP, nie chcę również tworzyć dwóch kolumn (np. w jednej tylko FLOAT, a w drugiej znaczki..). Najlepiej by było to wykonywane przy zapytaniu w ORDER BY CENA ASC ... może da się jakoś konwertować pole CENA na FLOAT przed sortowaniem w samym zapytaniu ? A jeśli tak, to jak ?

A przy okazji, istnieje jakiś typ pola w bazie danych do przechowywania cen ? Coś innego niż zmiennoprzecinkowe, tak jak np. w Excelu walutowe ?
Go to the top of the page
+Quote Post
phpion
post 19.03.2010, 13:09:26
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(iksigrek @ 19.03.2010, 13:02:48 ) *
może da się jakoś konwertować pole CENA na FLOAT przed sortowaniem w samym zapytaniu ?

http://dev.mysql.com/doc/refman/5.0/en/cas...l#function_cast
Go to the top of the page
+Quote Post
iksigrek
post 19.03.2010, 13:23:25
Post #3





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 19.08.2009

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


próbowałem już, ale wywala mi info o nieprawidłowej składni przy select * from cennik order by cast(cena as float) asc ..
Go to the top of the page
+Quote Post
Mchl
post 19.03.2010, 14:26:24
Post #4





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

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


Cytat(iksigrek @ 19.03.2010, 13:02:48 ) *
W cenniku w tabeli, kolumna zawierająca cenę może zawierać liczbę, bądź inne znaki określające w pewien sposób status ceny. Tak więc kolumna jest typu varchar. Musi to być realizowane w jednej kolumnie, bo tak w tym wypadku jest raczej najwygodniej.


No właśnie się przekonujesz, że raczej nie jest. Złamałeś reguły, teraz cierpisz.

Cytat(iksigrek @ 19.03.2010, 13:02:48 ) *
A przy okazji, istnieje jakiś typ pola w bazie danych do przechowywania cen ? Coś innego niż zmiennoprzecinkowe, tak jak np. w Excelu walutowe ?


DECIMAL
Go to the top of the page
+Quote Post
phpion
post 19.03.2010, 14:29:59
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(iksigrek @ 19.03.2010, 13:23:25 ) *
próbowałem już, ale wywala mi info o nieprawidłowej składni przy select * from cennik order by cast(cena as float) asc ..

A widzisz wśród możliwych typów float? Pokombinuj z innymi, na pewno znajdziesz odpowiedni winksmiley.jpg

No i kolega mnie ubiegł smile.gif

Ten post edytował phpion 19.03.2010, 14:30:27
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 Wersja Lo-Fi Aktualny czas: 30.04.2025 - 07:17