Autor | Zpráva | ||
---|---|---|---|
Matyáš Profil |
#1 · Zasláno: 2. 7. 2016, 10:46:08
Dobrý den, řeším následující problém: mám MySQL databázi s inzeráty, u kterých mám uložené ceny jako VARCHAR.
V tomto sloupci jsou hodnoty "zdarma", "nabídněte" a potom čísla (250, 150), které znamenají částku. Když vypisuji inzeráty z databáze, potřebuji je seřadit podle ceny vzestupně/sestupně. Přitom chci, aby platilo pravidlo, že při vzestupném řazení budou nejprve vypsány inzeráty, kde cena je "zdarma", poté "nabídněte" a následně budou inzeráty řazeny podle ceny v korunách. Příklad: zdarma, zdarma, nabídněte, 20, 85, 245, 350 ... Znám funkci ORDER BY FIELD(), ale ta není pro tuto potřebu použitelná. Nešlo by to přes ORDER BY CASE WHEN THEN ELSE ... ? Napadá mne jediné řešení, jak obejít tento problém. Změnit datový typ atributu cena na INT, místo zdarma psát -1, nabídněte 0 a pak ceny. Řazení by pak bylo jednoduché. Ovšem při pohledu do databáze to nebude úplně jasné, že -1 znamená zdarma, a to je vcelku velký problém. Předem děkuji za rady a nápady. |
||
Keeehi Profil |
#2 · Zasláno: 2. 7. 2016, 10:53:24
Matyáš:
„Ovšem při pohledu do databáze to nebude úplně jasné, že -1 znamená zdarma, a to je vcelku velký problém“ To vůbec žádný problém není. Co je v databázi tě vlastně vůbec nemusí zajímat. Nechceš ji ručně upravovat. O data v databázi by se měla starat jen a aplikace a když ta tomu "rozumí", tak to úplně stačí. Navíc varchar je nevhodný typ i kdyby jsi měl tam jen čísla. Ten tvůj příklad by ti to seřadilo 20 245 350 85 |
||
Matyáš Profil |
Keeehi: Děkuji za rychlou reakci.
> Ten tvůj příklad by ti to seřadilo 20 245 350 85 |
||
Alphard Profil |
#4 · Zasláno: 2. 7. 2016, 11:21:54
Jestli nepotřebujete i desetinná čísla, tak ano. Kdybyste do budoucna potřeboval rozšířit počet stavů, přidal by se další sloupec.
|
||
Matyáš Profil |
#5 · Zasláno: 2. 7. 2016, 11:41:39
Alphard:
Děkuji všem za názory, zatím si vystačím s INT, je to asi opravdu nejlepší řešení. |
||
Časová prodleva: 9 let
|
0