Výpočet hodnoty z více záznamů tabulky – lze v nette\database?

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

Ahoj, chtěl bych zde poprosit o radu.

Mám tabulku project, kde je atribut price (celková částka za zakázku). Pak mám tabulku worker_project, která mimo jiné obsahuje atribut payment (odměna pracovníka u daného projektu).
Můj dotaz zní, jak mohu získat zisk daného projektu (= project price – SUMA všech worker_project payment)? Jde mi o konkrétní kód, protože nemám vůbec představu, jestli to jde zapsat v Nette\Database, který používám nebo jestli zde už musím sáhnout na klasické query.

Projekty pak v Template vypisuji v klasické konstrukci foreach a potřebuji, aby atribut zisk (income) byl jedním z atributů objektu project, který zatím získávám klasickým $this->db->table(‚project‘);

Takových případů mám více a na tom jsem se teď zasekl.

Díky za rady, pokud na to jdu ze špatného konce, prosím o nakopnutí, díky!

David Matějka
Moderator | 6445
+
+3
-

Mohlo by fungovat neco jako:

$this->db->table('project')
	->select('project.price - SUM(:worker_project.payment) AS profit')
	->group('project.id')
	->fetch()->profit;
jandik.n
Člen | 41
+
0
-

Díky moc, to je přesně ono!

Mohl bys mě odkázat na nějakou pěknou stránku, kde bych se mohl nette database více naučit? Nějaké návody, tutoriály, příklady apod.?

Ještě jednou díky.

jandik.n
Člen | 41
+
0
-

Narazil jsem ještě na jednu věc, jestli můžu poprosit o radu.

Mám tedy následující dotaz:

<?php
$this->db->table('project')
	->select('*')->where('status <= ?', 4)->order('status')->order('deadline')
    ->select('project.price - SUM(:translator_project.payment) AS profit')->group('project.id');
?>

Jak do daného dotazu mohu zakomponovat podmínku WHERE, která se vztahuje pouze k :translator_project.payment? Např. kdybych chtěl počítat pouze :translator_project.payment větší než 1000 Kč?

Díky!

jandik.n
Člen | 41
+
0
-

Chci napsat podmínku pro součet částky, která překladatelům nebyla vyúčtována, tj. SUMA payment, u které accounted = 0.

Když udělám toto:

<?php
$selection = $this->db->table('translator')->select('*')->where('active', 1)->order('surname');
$selection->select('SUM(:translator_project.payment) AS payment_to_get')->where(':translator_project.accounted = 0')->group('translator.id');
?>

tak mi to načte pouze překladatele, kteří nemají nějakou částku vyúčtovanou. Vztahuje se to tedy k celému překladateli, já to potřebuji vztáhnout pouze k té SUMĚ.

Díky za radu!

besanek
Člen | 128
+
0
-

Zkus where() vyměnit za having()

jandik.n
Člen | 41
+
0
-

HAVING jsem tam původně měl, hází to stejný výsledek.