Nevím přijít na select count (nette 2.4)

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

ahoj,

chtěl bych tento dotaz převést do Selection:

SELECT project.title, (SELECT count(task.projectID) FROM task WHERE task.projectID = project.id)
FROM project

nebo nějakou lepší alternativu toho dotazu :)

skúšal jsem

<?php
$select = $this->database->table('project');
$select->select("COUNT(task.projectID)", "project.id = task.projectID");
?>

No reference found for $project->task

klic v tabulce mam
task.projectID → project.id

dekuji

GEpic
Člen | 566
+
0
-

Čeho přesně chceš docílit? Předpokládám že každý task má přiřazený project a příklad tak nedává moc smysl.

Editoval GEpic (29. 5. 2016 15:07)

zdeno
Člen | 13
+
0
-

chci aby mi to vrátílo počet tasku v jednotlivých projektech
id | title | count |
1 | projekt 1 | 5 |
2 | projekt 2 | 3 |

GEpic
Člen | 566
+
0
-

Tak prováděj select přímo nad task tabulkou a pak group by projectID. Pokud máš nastavenou dobře vazbu tak se z task dostaneš na project ($task->project->title v případe NDB)

Editoval GEpic (29. 5. 2016 15:29)

zdeno
Člen | 13
+
0
-

není to náročnější pro db když bude těch tasků hodně?
zejména pokud budu chtít jen počty některých projektů, které se týkají určitého uživatele?
(project.id IN (1, 7, 4))

asi se vratim k puvodnimu

<?php
$this->database->query("SELECT project.title, (SELECT count(task.projectID) FROM task WHERE task.projectID = project.id)
FROM project");
?>
GEpic
Člen | 566
+
0
-

zdeno napsal(a):

není to náročnější pro db když bude těch tasků hodně?
zejména pokud budu chtít jen počty některých projektů, které se týkají určitého uživatele?
(project.id IN (1, 7, 4))

asi se vratim k puvodnimu

<?php
$this->database->query("SELECT project.title, (SELECT count(task.projectID) FROM task WHERE task.projectID = project.id)
FROM project");
?>

Pořád to bude v rámci jednoho dotazu a to se o databázi bát nemusíš. Problém je, když je v rámci jednoho requestu několik dotazů na databázi. Ale ty máš pořád možnost to sloučit do jednoho. K tomu všemu stačí přidat WHERE, jak píšeš. :)

V Tracy navíc vidíš, kolik času dotazy zaberou, a pokud je to v rámci ms (max desítek ms), tak to nemá smysl řešit.

PS: https://doc.nette.org/…ase/explorer tady je to popsané

Editoval GEpic (29. 5. 2016 23:29)