Una domanda va bene. Come hai tu, e probabilmente l'opzione migliore. Devi capire quale è più efficiente, per lasciare che MySQL prenda la tensione, o la rete e PHP lo facciano. È molto meglio lasciare che PHP prenda la tensione rispetto a MySQL, ma dove MySQL ha funzionalità "incorporate", come il raggruppamento che desideri, quindi abbandona MySQL e salva il traffico di rete.
Per farlo funzionare:aggiungi "ORDER BY p.post_id, pc.comment_id" alla tua query - questo ottiene i risultati in ordine.
Quindi, se devi creare un array (sebbene tu possa essere in grado di elaborare direttamente senza utilizzare un array, il metodo sarebbe simile):
$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);
}