dotaz spojení tabulek plus agregační funkce sum
- Karel Chramosil
- Člen | 114
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
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
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');
- Karel Chramosil
- Člen | 114
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');
- Karel Chramosil
- Člen | 114
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
prave proto, ze je to cizi klic. nette je tak chytry, ze si umi precist strukturu databaze a podle toho ti sestavi odpovidajici join.