Autor Zpráva
Matyáš
Profil
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
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
To je fakt. Takže navrhujete dát cenu jako INT?
Alphard
Profil
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
Alphard:
Děkuji všem za názory, zatím si vystačím s INT, je to asi opravdu nejlepší řešení.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: