Nette\database reseni filtru
- MW
- Člen | 626
Zdravím a prosím o radu:
mam v modelu dotaz:
$this->data = $this->database->table('contracts')->select('contracts.*, clients.name AS client_name, branches.name AS branch_name,(SELECT predpis FROM mrp WHERE cislo_zak = contracts.mrp_cislo ORDER BY cislo DESC LIMIT 1) AS last, (SELECT SUM(sum)-SUM(predpis) FROM mrp WHERE cislo_zak = mrp_cislo) AS saldo');
pak bych rad pouzil volani s filtrem:
if ($filter) {
$this->data->where('saldo < price * -1');
}
ovšem dostavam
Unknown column 'saldo' in 'where clause'
Jak to prosim upravit? Asi to je tim aliasovanym nazvem, ktery to nebere ve WHERE..
Diky!
Editoval MW (11. 4. 2013 18:37)
- thunderbuff
- Člen | 164
Zkus ten dotaz rozdělit. Pokud používáš MySQL, tak vnořené selecty jsou zlo. Ve výsledku položíš víc dotazů, ale navzdory tomu bude výsledek zpracován mnohem rychleji. A jelikož budeš pracovat s menšími dotazy, filtr se bude debugovat mnohem lépe.
- thunderbuff
- Člen | 164
Ještě mě napadl jiný postup. Pokud to potřebuješ jako data do gridu, ve kterém to nebudeš živě editovat, ale jen číst, někdy se vyplatí udělat view v databázi. Dotaz v selection by se omezil na pouhý select do view a jednoduchý where.
- thunderbuff
- Člen | 164
pokud máš správně SQLko před tím where, tak problém mít nebudeš, protože view se ptáš jako obyčejné tabulky, která bude chápat SALDO jako obyčejný sloupec.
Editoval thunderbuff (12. 4. 2013 23:13)