Přidání Count z jiné tabulky do výsledku DB

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

Zdravím, momentálně řeším jak nejlépe a správně přidat každému řádku výsledku dotazu z DB další údaj, který má být počet řádku z jiné tabulky.

Mám dvě tabulky:

konverzace: id,mail,created_at,.....
zpravy: id,text,created_at,read_at,konverzace_id (cizí klíč),....

Potřebuji z modelu dostat do šablony proměnou ve které budu mít všechny konverzace a u každé konverzace údaj o počtu nepřečtených zpráv, který bych získal z tabulky zpravy přes konverzace_id.

V modelu mám

//pro získání konverzací
public function getAllConversation() {
	return $this->database->table("konverzace")->order("updated_at DESC");
}

//pro získání počtu nepřečtených zpráv v konverzaci
public function getCountUnreadMessages($id_konverzace){
	return $this->database->table("zpravy")->where("konverzace_id", $idKonverzace)->where("read_at", NULL)->count();
}

Snad je to srozumitelné.
Potřeboval bych poradit jak na to správně. Dřív bych to zbastlil procedurálně a bylo by to, ale jak správně na to jít v nette? Díky moc za odpovědi!

premek_k
Člen | 172
+
0
-

Já bych to udělal nějak takto:

public function getAllConversationWithUnreadMessagesCount() {
	$sel = "SELECT k.*,
			(SELECT COUNT(*) FROM zpravy WHERE konverzace_id = k.id AND read_at IS NULL) as unread_count
			FROM konverzace k
			ORDER BY k.updated_at DESC";
    return $this->database->query($sel);
}

Editoval premek_k (11. 3. 2015 13:45)

Maisner
Člen | 6
+
0
-

Díky moc. Teď když to vidím, tak je to jasné. Asi jsem v tom hledal zbytečně složitosti. Díky.