Ich möchte die Anzahl der Kommentare für jeden Blog-Post (zusammen mit Kategorie, Datum, Autor usw.) auf einer Seite, die eine Liste von Blog-Posts hat. Wie schreibe ich die folgende mysql Abfrage in Antrieb?Sql-Abfrage (innerer Join + Anzahl + Gruppe von) mit Propel
SELECT post.id, post.title, post.more_columns , COUNT(comments.post_id) AS numofcomments FROM post INNER JOIN comments ON post.id = comments.post_id GROUP BY post.id, post.title, post.more_columns
wo Post eine Blog-Tabelle und Kommentare, eine Tabelle von Kommentaren mit post_id als Fremdschlüssel post.id. Ich kann nicht scheinen, numofcomments als eine Spalte in der Ergebnismenge. Derzeit bin ich ein nicht-ORM-Ansatz (die mein letztes Mittel sein wird):
$con = Propel::getConnection(PostPeer::DATABASE_NAME);
$sql = "SELECT post.* , COUNT(comments.post_id) AS numcomments FROM post INNER JOIN comments ON post.id = comments.post_id GROUP BY post.id";
$stmt = $con->prepare($sql);
$stmt->execute();
$result = PostPeer::populateObjects($stmt);
return $result;
Wie kann ich ‚numofcomments‘ Zugriff in der resultierenden Propel resultset?
EDIT: Was ich wissen wollte ist, wie ich die obige Abfrage in Propel schreiben kann? Was ich jetzt tun kann, ist, die Post-Tabelle mit innerem Join in der Kommentartabelle zu erhalten und dann doCount in der Kommentartabelle für jede Post-ID auszuführen. Dies führt zu 1 Abfrage für die Post-Tabelle und viele Abfragen für die Kommentartabelle. Ich möchte die SQL-Abfragen auf ein Minimum reduzieren. Thanks :)
Dank @nos ...das war ein grundlegender Fehler, die Group-by-Abfrage nicht korrekt zu schreiben, aber die Frage ist anders. Ich habe es bearbeitet ... kannst du das nochmal überprüfen? :) – fenderplayer