1つのクエリで問題ありません。あなたがそれを持っているように、そしておそらくより良いオプトン。 MySQLに負担をかけるか、ネットワークとPHPに負担をかけるか、どちらがより効率的かを判断する必要があります。 PHPにMySQLよりも負担をかける方がはるかに優れていますが、MySQLに必要なグループ化などの「組み込み」機能がある場合は、MySQLを離れて、ネットワークトラフィックを節約します。
これを機能させるには、クエリに「ORDER BY p.post_id、pc.comment_id」を追加します。これにより、結果が順番に取得されます。
次に、配列に組み込む必要がある場合(配列を使用せずに直接処理できる場合もありますが、方法は似ています):
$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);
}