Nette\database reseni filtru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
MW
Člen | 626
+
0
-

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
+
0
-

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.

MW
Člen | 626
+
0
-

Kdyz ja to potrebuju do jednoho gridu..
Jak to myslis rozdelit?

Diky !

Editoval MW (11. 4. 2013 22:02)

thunderbuff
Člen | 164
+
0
-

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.

MW
Člen | 626
+
0
-

Ale ve view budu mit stejny problem ne? Nezkousel jsem jeste …

thunderbuff
Člen | 164
+
0
-

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)

MW
Člen | 626
+
0
-

Zkusim.. diky !