Autor Zpráva
Tomasekkk
Profil *
Ahoj, mam tabulku s cenikem, chtěl bych se zeptat, zda existuje nějaká možnost jak jednoduše vyhledávat zboží v selectu dle zadané ceny OD DO. Tzn. mám select a v něm tabulku s daty, kde do pole cena se píše buď textová hodnota (dohoda, v textu apod.) nebo hodnota číselná, potřeboval bych nějaký SQL dotaz, který mi dokáže vyselectovat záznamy podle ceny od a ceny do ... Myslel jsem, ze bych to udelal pres podminku IF a podle toho pak doplnoval do SELECTu, ale myslim si, ze by neco mohlo existovat i v mysql selectu, kde bych pouze zadal hodnoty OD a DO, pripadne, pokuid by hodnota OD nebo DO nebyla vyplnena bral by jen jednu ... Doufam, ze muj chaoticky prispevek chapete. Diky moc Tomáš
Keeehi
Profil
SELECT * FROM tabulka WHERE cena>2000 AND cena<5000
Tomasekkk
Profil *
No to já vím, ale co když cena DO nebude vyplněna? Proto jsem se ptal, buď to udělat pomocí IF a zjistit zda-li je jedna poloźka vyplnena a druha nebo nebo naopak a pak teprve z toho udelat nějakou podmínku WHERE
Keeehi
Profil
Ano, v php složit tu podmínku podle toho, co bude vyplněno.
Tomasekkk
Profil *
Aha, to je ono co se mi moc nechtelo delat a myslel jsem, ze neco v SELECTU existuje, co by umoznilo vyhledavani i bez teto podminky :-) Diky za informaci a potvrzeni toho co jsem si myslel ;o)
Tomasekkk
Profil *
Udělal jsem takovou podmínku, když zadám ale cenu od 1 do 10 000 nacte mi to 3 zaznamy kde jsou zaznamy 1Kć, 1Kč a 10000Kč, al epokud zadám cenu od 2Kč do 10 000Kč, tak se mi už 10000Kč záznam neobjeví :-( Dělám někde chybu?

if (($vyhledavana_cenaod!="") AND ($vyhledavana_cenado!="")) {
$dopln_hledani_podle_ceny = " AND cena>='$vyhledavana_cenaod' AND cena<='$vyhledavana_cenado'";
} elseif (($vyhledavana_cenaod!="") AND ($vyhledavana_cenado=="")) {
$dopln_hledani_podle_ceny = " AND cena>='$vyhledavana_cenaod'"; 
} elseif (($vyhledavana_cenaod=="") AND ($vyhledavana_cenado!="")) {
$dopln_hledani_podle_ceny = " AND cena<='$vyhledavana_cenado'"; 
} 
Tomasekkk
Profil *
Nemuze být problém v mysql tabulce kde mám u ceny nastavené varchar(100) ???
Keeehi
Profil
Tomasekkk:
Nemuze být problém v mysql tabulce kde mám u ceny nastavené varchar(100) ???
No rozhodně by byl lepší nějaký číselný.

Ta složitá podmínka by se měla nechat přepsat takto:
$dopln_hledani_podle_ceny = (!empty($vyhledavana_cenaod)?" AND cena>='$vyhledavana_cenaod'":"").(!empty($vyhledavana_cenado)?" AND cena<='$vyhledavana_cenado'":"");


Zkus taky vypsat, jak vypadá výsledný SQL dotaz.
Tomasekkk
Profil *
Tak stejný problém i po změně podmínky

SELECT vypíše

SELECT id, nazev, sekce, fotografie, zobrazit,  popis, nazev, id_kategorie, vlozeno, navstev, cena, vlozil FROM seznam_zbozi WHERE MATCH(popis,nazev) AGAINST ("+(>auto)" IN BOOLEAN MODE) AND (zobrazit="1" OR zobrazit="2") AND cena>='2' AND cena<='10000' ORDER BY zobrazit DESC


zvláštní, že pokud zadám slovo auto a cenu dám od 10000 do 10000 tak se zobrazí, pokud zadám cenu od 1 do 10000 tak taky, spíš mi to připadá, že to může dělat ten varchar, ale co zvolit, když potřebuji v políčku mít i text :-(
Tomasekkk
Profil *
Navíc ještě vznikl problém, když zadám cenu od 10000 do 2 tak mi to listuje i jiné položky, které jsou vyšší než 2 ... Asi něco chybí v podmínce
Keeehi
Profil
jaké texty tam potřebuješ? Jako zástupné symboly můžeš použít třeba -. (cena dohodou = -1)
Tomasekkk
Profil *
No to si tam vepisujou lide ... Proste je tam policko do ktereho si muzou napsat co chteji ... je tam prednastavene dohodou atp. ale mohou si napsat i cokoli jineho ...
Keeehi
Profil
Tomasekkk:
Takže chyba je v nakonec v apostrofech
AND cena>='2' AND cena<='10000'
Jelikož se jedná o čísla, tak tam nemají co dělat. Mysql to pak bralo jako řetězec a né číslo a proto to dělalo, co to dělalo.

Upravený kód:
$dopln_hledani_podle_ceny = (!empty($vyhledavana_cenaod)?" AND
cena>=$vyhledavana_cenaod":"").(!empty($vyhledavana_cenado)?" AND cena<=$vyhledavana_cenado":"");
Tomasekkk
Profil *
Mockrát díky, už to funguje, ty apostrofy to jsem nevěděl, už jsem zase chytřejší, škoda, že tady nejdou oznámkovat členové, hned by si dostal bod :-) Ještě jednou díky
Tomasekkk
Profil *
No jeste jsem sice objevil chybu, ze kdyz mam order by cena ASC, tak mi to ukazuje zaznamy v Kč: 1,10,10000,380,2000 apod. ale na to snad dojdu ;o)
Keeehi
Profil
Tomasekkk:
Chyba bude asi někde jinde, mělo by to fungovat v pořádku. Třeba je tam někde překlep. Zase se koukni, co jak vypadá ten dotaz před provedením. Můžeš ho taky zkusit spustit v phpmyadmin, pokud je v něm chyba, tak chybová hláška většinou pomůže.
Tomasekkk
Profil *
jo funguje, jen je problem v order by cena ... hledam na google order by varchar právě je tam popisovaná chyba a jak ji lze řešit, bohužel v těch návodech jsem nedohledal co pouźít v mysql někdo píše Order By int(cena) ale toto také nefunguje ... Jinak podminka, kterou si mi poslal je v pořádku a funkční, teď jen to seřazování dle ceny když je v políčku varchar ...
Tomasekkk
Profil *
Tak jsem uz neco nasel:

ORDER BY CAST(`cena` AS DECIMAL(10,2)) ASC
Kajman_
Profil *
Zavčas si udělejte dva sloupečky. Jeden s číselnou cenou a druhý na poznámku (dohodou) nebo cokoliv, co tam lidi zadají kromě čísla.
Keeehi
Profil
Tomasekkk:
Když jsem to testoval, tak jsem na takový problém prostě nenarazil. Ještě by tu případně bylo i jiné řešení ORDER BY (cena*1) ASC. (text se převede na 0 a všechno to už budou čísla)

Jinak 100% souhlasím s Kajmanem.

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:

0