Autor Zpráva
shamania
Profil
Nejak jsem se v manualu nemohl dohledat odpovedi na nasledujici otazku. Kdyz si vytvorim v SELECTu sloupec, ktery fyzicky neni v zadne tabulce, muzu ho pouzivat ve WHERE. Vim, ze se da treba pouzit v ORDER BY, ale ve WHERE mi to nejde..
Diky za pomoc. V prikladu kodu je problem zvyraznen.
Unknown column 'cenacelkem' in 'where clause'
select *,p.predmet sPredmet,s.predmet predmet,(s.pocet * s.cena) as cenacelkem from subdodavky s,poptavky p, dodavatele d where 1=1 and s.id_kcemu = p.id_poptavky and s.id_dodavatele = d.id_dodavatele and s.table_kcemu = 'poptavky' and ( (cislo_poptavky like '%56%' or firma like '%56%' or s.predmet like '%56%' or pocet like '%56%' or cena like '%56%' or cenacelkem like '%56%' ) ) 
Kajman_
Profil *
Můžete tu podmínku dát do having.
shamania
Profil
Diky za tip. Zkusil jsem tedy WHERE prepsat za HAVING a ono to funguje.. problem je ze tento dotaz generuji, takze ho pouzivam vsude kde je potreba neco vypisovat - filtrovat. Chci se tedy zeptat jestli me necekaji nejake komplikace s touto zamenou WHERE za HAVING.. having tak casto nepouzivam, ale vypada to, ze by se to melo chovat uplne stejne.

---

Tak problem jsem zahy objevil :) S having je to desne pomaly! pul minuty oproti dvou desetinam sekundy.. Navic jen pro tento sloupec nemuzu postavit HAVING protoze tam uz pak neni vazba na where podminky, takze je to k nicemu :(
Kajman_
Profil *
Having se dělá až na konec z výsledku selectu, kdy je třeba filtrovat dle sloupečků spočítaných např. při group by. Nepoužijí se např. indexy, jako při where prodmínce.

Nejsem si jistý, jestli to jde udělat univerzálně pro jakýkoliv dotaz, ale pro tenhle jeden si zkuste dát do having jen ty like podmínky (s % na začátku v like stejně index nepůjde použít).

select *,
       p.predmet sPredmet,
       s.predmet predmet,
       (s.pocet * s.cena) as cenacelkem
from   subdodavky s, poptavky p, dodavatele d
where  1 = 1
       and s.id_kcemu = p.id_poptavky
       and s.id_dodavatele = d.id_dodavatele
       and s.table_kcemu = 'poptavky'
having
       cislo_poptavky like '%56%'
       or firma like '%56%'
       or s.predmet like '%56%'
       or pocet like '%56%'
       or cena like '%56%'
       or cenacelkem like '%56%'


Nebo si to zanořit do poddotazů.

Také můžete použít where (s.pocet * s.cena) like '%56%' ... ale při group by dotazech to stejně nebude fungovat, i když by jste si vyparsoval, čeho je cenacelkem alias.
shamania
Profil
No jo.. ja jsem hlava dubova :) ze jsem tam cpal i ty relacni podminky! takhle ten filtr zvlast v having funguje docela dobre. Uvidime casem.. kazdopadne diky!
Toto téma je uzamčeno. Odpověď nelze zaslat.

0