Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Sortowanie string, ale nie alfanumerycznie.. jak ?
Forum PHP.pl > Forum > Bazy danych > MySQL
iksigrek
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 ?
phpion
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
iksigrek
próbowałem już, ale wywala mi info o nieprawidłowej składni przy select * from cennik order by cast(cena as float) asc ..
Mchl
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
phpion
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
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.