Én forespørgsel er fin. Som du har det, og sandsynligvis det bedre valg. Du skal finde ud af, hvad der er mere effektivt, for at lade MySQL tage belastningen, eller netværket og PHP tage belastningen. Det er meget bedre at lade PHP tage belastningen end MySQL, men hvor MySQL har "indbyggede" funktioner, såsom den gruppering du ønsker, så forlad MySQL og gem netværkstrafikken.
For at få dette til at fungere:tilføj "ORDER BY p.post_id, pc.comment_id" til din forespørgsel - dette får resultaterne i orden.
Så, hvis du skal bygge ind i et array (selvom du muligvis kan behandle direkte uden at bruge et array, ville metoden være ens):
$lastPostID = 0;
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
if ($lastPostID <> $row['post_id']) {
$lastPostID = $row['post_id'];
$answers[$lastPostID] = array('post_id' => $row['post_id'],
'author_id' => $row['author_id'],
etc
'comments' => array() );
}
$answers[$lastPostID]['comments'][] = array('comment_id' => $row['comment_id'], 'coment' => $row['comment'] etc);
}