Autor Zpráva
Petr1234
Profil *
Čau,

mám v databázi pár řádků a v každám z nich je nějaké velikost HDD. Když je dám pomocí SQL dotazu setřídit jako ASC, tak se mi to vypíše takto:

100 GB
120 GB
40 GB
60 GB
80 GB

což je blbě - dá se to nějak setřídit vzestupně podle kapacity aniž bych musel ještě do tabulky přidat nějaký extra sloupeček pro pořadí?

Díky
djlj
Profil
Asi bych ze všech řádků oddělal „ GB“ a sloupec uložil jej jako int. Pak jen vybíral jako SELECT CONCAT(sloupec, ' GB') FROM tabulka ORDER BY sloupec ASC.
joejoe
Profil *
mas spatne navrzenou tabulku
co kdyz bys vlozil hodnotu 300MB ?

potom by byl spravny vysledek takovyto ?
40 GB
60 GB
80 GB
100 GB
120 GB
300 MB

Pokud chces seradit cisla podle velikosti (a ne abecedne), tak muzes bud:
1) ulozit si to do databaze ve stejnych jednotkach do pole typu integer, float nebo double.
2) muzes udelat takovou obezlicku, ze to textove upravis tak, ze tam pridas 0:
040 GB
060 GB
080 GB
100 GB
120 GB
300 MB
3) vytahnes si to z databaze a prevedes na int a seradis znovu

z hlavy napsane - by to mohlo vypadat priblizne takhle:

$query = "SELECT * FROM `disky`"
$result = mysql_query($query) or die(mysql_error());
$pole = array();
$i = 0;
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
$pole[$i++] = $row;
// echo $row['velikost'].'<br/>';
}


function cmp ($a, $b) {
if ($a == $b) {
return 0;
}
return ((int)$a['velikost'] < (int)$b['velikost']) ? -1 : 1;
}


usort($pole, "cmp");

print_r($pole);
Petr1234
Profil *
Hmm, trosku je problem s tim, ze v te tabulce jsou i jina data - je to seznam kategorii k internetovému obchodu. Nemůžu tak dělat pro každý specifický název kategorie extra podmínky apod...

Petr
Toto téma je uzamčeno. Odpověď nelze zaslat.

0