To jest tylko wersja do druku, aby zobaczyć pełną wersję tematu, kliknij TUTAJ
phpBB2 by Przemo
Support forów phpBB2 modified by Przemo

Bazy danych SQL - Problem z sortowaniem wyników MySQL

Sebxx - 24-09-2013, 19:35
Temat postu: Problem z sortowaniem wyników MySQL
Witajcie.
Piszę pewien skrypt, który wymaga połączenia z bazą danych i wybrania z niej (w tym wypadku) cen SMS'a. Chcę aby ceny były posortowane i wyświetlone w kolejności rosnącej, tj od najmniejszej ceny do największej. Więc ni z gruchy, ni z pietruchy wykonałem takie zapytanie do bazy:

Kod:

SELECT * FROM `shop_sms` ORDER BY `cena` ASC


A co dostaję ? Coś takiego:


Ten cennik generowany jest przez taki kod:
Kod:

include('./lib/db.php');
$sms = mysql_query("SELECT * FROM `shop_sms` ORDER BY `cena` ASC");
$rec = mysql_num_rows($sms);
$i=1;
while($rec=mysql_fetch_row($ogl)){
echo '<tr align="center">
<td>'.$i++.'</td>
<td>'.$rec[1].'</td>
<td>'.$rec[2].'</td>
<td>'.$rec[3].'</td>
<td>'.$rec[4].'</td>
</tr>';
}


Nie wiecie może jak "zmusić" ten skrypt aby prawidłowo wyświetlał te wartości ?

Woytec - 24-09-2013, 20:02

Musisz zwrócić uwagę na typ pola "cena" i na odpowiedni znak przecinka oddzielającego liczby. Teraz sortuje alfabetycznie (liczby zaczynające się na 1, potem 2 itd.).
Sebxx - 24-09-2013, 21:23

Te ceny wpisane są do bazy każda w osobną rubrykę, a przecinek zastąpiony jest kropką (jeśli o to chodzi). Wygląda to tak:



Co do tego sortowania alfabetycznego - da się to jakoś przestawić na "liczbowe" ?

[ Dodano: 24-09-2013, 22:27 ]
//EDIT:

Chyba jestem na dobrej drodze. Zmieniłem typ tego pola z varchar na int i teraz sortuje jak należy, ale obcina mi wartości po przecinku (kropce). Co powinienem tam ustawić jako typ ?

Woytec - 25-09-2013, 15:51

decimal, float, double lub real.
MQs - 25-09-2013, 17:29

Dla pieniędzy najlepszy DECIMAL. Jeśli chodzi o rozmiar to podajesz w formacie (m,n) gdzie m to max ilość wszystkich cyfr, a n to ilość po przecinku. Np. dla (6,2) możesz wpisywać ceny w zakresie -/+9999,99.

Pamiętaj, że poprawny format liczb dla php i bazy to dziesiętne miejsca po kropce, a dane przesyłane przez formularze to ciągi (string) najczęściej z przecinkiem. Żeby nie było problemów to przed wprowadzaniem danych do bazy warto je sprawdzić.

Sebxx - 25-09-2013, 20:06

Mam tam funkcje, która zmienia przecinek na kropke zanim zostanie wysłana wartość dziesiętna do bazy.


Powered by phpBB modified by Przemo © 2003 phpBB Group