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
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
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)