Filtrování dat vztahující se pouze k části dotazu

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

Ahoj, mám následující dotaz, kde chci spočítat nevyúčtované částky překladatelů (accounted = 0).

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

Dotaz se chová tak, že mi vyfiltruje překladatele, kteří mají nějakou práci nevyúčtovanou a překladatele, co mají veškerou práci vyúčtovanou vyhodí pryč, což je asi logické.
Potřebuji však dotaz sestavit tak, aby se podmínka s „having accounted = 0“ vztahovala pouze k samotné SUMě.

Věděl byste někdo, jak?

Díky!

David Matějka
Moderator | 6445
+
+1
-

zkus zahodit to having a pouzit neco jako

$selection->select("SUM(IF(:translator_project.accounted = 0, :translator_project.payment, 0)) AS payment_to_get")
jandik.n
Člen | 41
+
0
-

matej21 napsal(a):

zkus zahodit to having a pouzit neco jako

$selection->select("SUM(IF(:translator_project.accounted = 0, :translator_project.payment, 0)) AS payment_to_get")

Ty jo, seš dobrej, funguje přesně, jak má :-)

O takovéto konstrukci jsem neměl tušení. Jsou někde vypsané takovéto konstrukce pro Nette Database, abych věděl, jaké jsou další možnosti?

Díky moc!

Editoval jandik.n (10. 11. 2014 16:32)

Mysteria
Člen | 797
+
0
-

Tohle ale není žádná speciální konstrukce Nette (kromě té dovojtečky, která značí backjoin) ale normální konstrunkce SQL jazyka (podmínky, agregační funkce,…).