dotaz spojení tabulek plus agregační funkce sum

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

Nette Framework 2.0.3 (revision eb558ae released on 2012–04–04), EasyPHP 5.3.9

Prosím o radu jak správně napsat funkční dotaz: spojení tabulek plus agregační funkce.

SELECT sum(kosik.kusu*sklad.cenaprodej) FROM kosik,sklad WHERE sklad.id = kosik.sklad_id

Můj pokus funguje až k podmínce where:

		$this->template->celkem = $this->context->database->table('kosik','sklad')->sum('kosik.kusu * sklad.cenaprodej')->where('sklad.id = kosik.sklad_id');

prosím o radu jak správně napsat podmínu za příkazem where?

David Matějka
Moderator | 6445
+
0
-

ruku do ohne za to nedam, ale melo by fungovat tohle:

$this->template->celkem = $this->context->database->table('kosik')->sum('kusu * sklad.cenaprodej');

o relace by se Nette\Database mela postarat sama

Karel Chramosil
Člen | 114
+
0
-

Děkuji za pomoc. Problém jsem vyřešil, záleží na zadání pořadí podmínky where. Správně dotaz funguje ve tvaru.

$this->template->celkem = $this->context->database->table('kosik','sklad')->where(array('sklad.id = kosik.sklad_id','ip_address' => $ip_address))->sum('kosik.kusu * sklad.cenaprodej');
hrach
Člen | 1838
+
0
-

to ti nemuze fungovat. at uz si myslis cokoliv, na ma slova dojde :P :D
napriklad volatni dvou argumentu v metode table je blbost.

Karel Chramosil
Člen | 114
+
0
-

Upravil jsem dotaz podle poslední připomínky, a vše funguje. Děkuji za radu, stále trochu při psaní dotazů zápasím s nevědomostí.

$this->template->celkem = $this->context->database->table('kosik')->where(array('sklad.id = kosik.sklad_id','session_id' => $session_id,'ip_address' => $ip_address))->sum('kosik.kusu * sklad.cenaprodej');
hrach
Člen | 1838
+
0
-

No a stale si myslim, ze 'sklad.id = kosik.sklad_id' je zbytecne. Melo by to vypadat, jak psal matej.

$sum = $this->context->database
	->table('kosik')
	->where('session_id', $session_id)
	->where('ip_address', $ip_address)
	->sum('kosik.kusu * sklad.cenaprodej')
;
Karel Chramosil
Člen | 114
+
0
-

Děkuji za radu. Skutečně poslední příkaz funguje. Jenom mne není jasné proč. I když kosik.sklad_id je cizí klíč tabulky sklad.

$this->template->celkem = $this->context->createKosiks()
		    ->where('session_id', $session_id)
		    ->where('ip_address', $ip_address)
    		->sum('kosik.kusu * sklad.cenaprodej');
David Matějka
Moderator | 6445
+
0
-

prave proto, ze je to cizi klic. nette je tak chytry, ze si umi precist strukturu databaze a podle toho ti sestavi odpovidajici join.