Satu permintaan baik-baik saja. Seperti yang Anda miliki, dan mungkin pilihan yang lebih baik. Anda harus mencari tahu mana yang lebih efisien, membiarkan MySQL mengambil beban, atau jaringan dan PHP mengambil beban. Jauh lebih baik membiarkan PHP mengambil beban daripada MySQL, tetapi jika MySQL memiliki fitur "inbuilt", seperti pengelompokan yang Anda inginkan, maka tinggalkan MySQL dan simpan lalu lintas jaringan.
Untuk membuatnya berfungsi:tambahkan "ORDER BY p.post_id, pc.comment_id" ke kueri Anda - ini akan mendapatkan hasil secara berurutan.
Kemudian, jika Anda harus membangun ke dalam array (walaupun Anda mungkin dapat memproses secara langsung tanpa menggunakan array, metodenya akan serupa):
$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);
}