Autor | Zpráva | ||
---|---|---|---|
Bita Profil * |
#1 · Zasláno: 22. 9. 2014, 10:39:57
Zdravím našel jsem zde jak se jednotlivé dotazy zapisují, ale potřeboval bych pomoct s konkrétním dotazem...chci třídit záznamy od největší ceny po nejmenší cenu neví někdo prosím jak to zapsat ? :-( Problémové místo jsem zvýraznil tučne. Předem díky moc...
$query="SELECT idZbozi, nazev, kratky_popis, cena, url FROM eshop_zbozi WHERE (cena BETWEEN $hodnota1 AND $hodnota2) AND idZbozi IN(SELECT item FROM eshop_zbozi_kategorie WHERE structure='$idStranky') ORDER BY $order ASC LIMIT $start,$per_page"; |
||
juriad Profil |
#2 · Zasláno: 22. 9. 2014, 10:44:26
Problém je na jiném místě, na konci. Tam je klauzule ORDER BY, která v překladu říká, podle čeho řadit.
Momentálně je to řízené proměnnou $order, ale směr řazení je vždy ASC(ending) - vzestupně. Opakem je řazení sestupně DESC(ending). Pokud vždy chceš řadit podle ceny sestupně změň klauzuli ORDER BY na: ORDER BY cena DESC |
||
lionel messi Profil |
$query="SELECT idZbozi, nazev, kratky_popis, cena, url FROM eshop_zbozi WHERE (cena BETWEEN $hodnota1 AND $hodnota2) AND idZbozi IN(SELECT item FROM eshop_zbozi_kategorie WHERE structure='$idStranky') ORDER BY cena DESC, $order ASC LIMIT $start,$per_page"; juriad odpovedal rýchlejšie aj s podrobným vysvetlením. |
||
Bita Profil * |
#4 · Zasláno: 22. 9. 2014, 11:03:56
Díky moc za rady...už mi to řadí jen částečně od největších cen...jelikož mám ceny i nad 99 999 KČ tak od těch seto neřadí ... řadí se to jen podle devítek....pokud je třeba 130 000 cena tak se nezobrazí jestli mi rozumíte
|
||
rovi Profil |
[#1]Order by znamená setřídit podle.
Tudíž ... ORDER BY $order DESC ... co jsem pochopil z sql dotazu, cos napsal. Slovíčko DESC / ASC vyměň podle potřeby. Nastavuje výpis řazení desc je sestupně |
||
juriad Profil |
#6 · Zasláno: 22. 9. 2014, 11:07:46
Bita:
Nerozumíme. Jaký je datový typ sloupce cena ?
Jaké pořádí (cen) to teď vrací, napiš raději ukázku pořádí a ne popis, který nikdo nechápe. |
||
anonymníí Profil * |
#7 · Zasláno: 22. 9. 2014, 11:09:52
Bita:
Je cena typu int ? Ukládáš tam čísla bez mezer? Jaké jsou proměnné $hodnota1 a $hodnota2 ?
Pokud je cen v rozmezí těch proměnných, je uložena jako číslo a bez mezer, tak to fungovat musí. |
||
Bita Profil * |
#8 · Zasláno: 22. 9. 2014, 11:10:47
Vaše rady jsou určitě správné, teď jsem zjistil že cenu mám typu varchar, to je určitě tím ne ?
|
||
rovi Profil |
#9 · Zasláno: 22. 9. 2014, 11:11:00
juriad
Tak tak. bita Vypadá to, že v sloupi cena nejsou čísla, ale nějaký typ řetězce textu. Pro formátování používej php a ne databázi. |
||
Bita Profil * |
#10 · Zasláno: 22. 9. 2014, 11:12:44
$hodnota1=0; $hodnota2=999898989; cena typu varchar SQL dotaz : $query="SELECT idZbozi, nazev, kratky_popis, cena, url FROM eshop_zbozi WHERE (cena BETWEEN $hodnota1 AND $hodnota2) AND idZbozi IN(SELECT item FROM eshop_zbozi_kategorie WHERE structure='$idStranky') ORDER BY cena DESC" |
||
juriad Profil |
#11 · Zasláno: 22. 9. 2014, 11:17:40
Bita:
Že ta cena je uložená přesně takto včetně mezer a jednotky na konci. 99 999 KČ Toto není dlouhodobě udržitelná varianta. Databáze slouží k ukládání dat v nejobecnější podobě, formátování do ní nepatří. Cena je a vždy byla (desetinné) číslo. |
||
rovi Profil |
Cena by měla být alespoň INT
nebo tedy juriad float |
||
juriad Profil |
rovi:
Nikoli. Cena by měl být DECIMAL. Pokud je cena jen "99999" jako řetězec, tak bude fungovat toto (samozřejmě to nezvládne desetinnou čárku ani mezery): ORDER BY CONVERT(cena, DECIMAL(10,2)) DESC |
||
rovi Profil |
#14 · Zasláno: 22. 9. 2014, 11:33:48
juriad
Díky! Jdu upravovat databáze :D |
||
juriad Profil |
rovi:
Ještě odkazy: http://stackoverflow.com/questions/13030368/best-data-type-to-store-money-values-in-mysql These types are used when it is important to preserve exact precision, for example with monetary data. http://dev.mysql.com/doc/refman/5.0/en/fixed-point-types.html |
||
Bita Profil * |
#16 · Zasláno: 22. 9. 2014, 12:45:07
ne to rozhodně ne :-) jen prostě varchar jinak ve formátu 555.. žadne kč ani mezery...díky všem moc za rady
|
||
anonymníí Profil * |
#17 · Zasláno: 22. 9. 2014, 12:47:06
Bita:
musí být int. integery (čísla) se porovnávají klasicky, jak tě učili ve škole. Stringy se porovnávají podle prvního (a dalšího, při shodě) znaku, 2 > 1, ale také 2 > 100. |
||
Časová prodleva: 10 let
|
0