Automatický cout z jine tabulky /vyreseno

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

//edit: vyreseno

Ahoj,

resim problem, se kterym si nevim rady. Potrebuji vybrat vsechny fotky a z jine tabulky secit pocet hlasu, ktery kazda fotka ma..

tabulky vypadaji takto:

tabulka photo:
id | name | status

tabulka point:
id | photo_id

takze ja potrebuju vybrat vse z tabulky photo, kde je stav = 1 a pote vybrat a secist pocet zaznamu z tabulky point kde photo_id = photo.id

Dotaz jsem udelal takovyto:

$this->database->table('photo')->select('COUNT(point:id) as points')->where('photo.status', 1)->order('photo.id DESC');

a nette sestavi:

SELECT COUNT(`point`.`id`) `as` `points`
FROM `photo`
LEFT JOIN `point` ON `photo`.`id` = `point`.`photo_id`
WHERE (`photo`.`status` = ?)
ORDER BY `photo`.`id` DESC
LIMIT 12

coz skonci chybou. Nevite kde je chyba?

Dekuji

Editoval tomasnikl (21. 6. 2012 12:24)

tomasnikl
Člen | 137
+
0
-

Jezisi kriste, ona chyba byla v tom selectu:

->select('COUNT(point:id) as points')

ma to byt (s velkym AS):

->select('COUNT(point:id) AS points')

a ted uz to funguje…

vvoody
Člen | 910
+
0
-

nj :D tiez som vzdy cumel co to na mna vyblafla ladenka ked som dal klucove slovo malymi posmenami.

Dam ti takeho typa ;) do tabulky photo si pridaj nieco ako point_count. Pri kazdej zmene v tabulke point (insert/delete) upravis aj point_count (+1/-1). Tak budes mat ten count priamo pri fotke, je to menej narocne ako stale pokladat join pri zobrazovani tych fotiek. No ak si to cachujes tak to je sumak. ;)

hrach
Člen | 1834
+
0
-

Spravna nette way
Pokud nepotrebujes podle dane podminky filtrovat, nemel by si delat join ale toto

foreach ($db->table('photo')->where('status', 1) as $photo) {
	echo $photo->id;
	echo $photo->count('point:id');
}
tomasnikl
Člen | 137
+
0
-

potrebuju potom podle te podminky radit (radit vysledky podle poctu bodu), takze join asi nutny bude…

hrach
Člen | 1834
+
0
-

Priste je to tedy treba zminit, v nette database to hraje zasadni roli pri sestavovani dotazu :)