Une requête suffit. Comme vous l'avez, et probablement la meilleure option. Vous devez déterminer ce qui est le plus efficace, laisser MySQL prendre la charge, ou le réseau et PHP prendre la charge. C'est bien mieux de laisser PHP prendre la pression que MySQL, mais là où MySQL a des fonctionnalités "intégrées", telles que le regroupement que vous désirez, alors quittez MySQL et économisez le trafic réseau.
Pour que cela fonctionne :ajoutez "ORDER BY p.post_id, pc.comment_id" à votre requête - cela obtient les résultats dans l'ordre.
Ensuite, si vous devez construire dans un tableau (bien que vous puissiez traiter directement sans utiliser de tableau, la méthode serait similaire) :
$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);
}