Едно запитване е добре. Както го имате, и вероятно по-добрият вариант. Трябва да разберете кое е по-ефективно, за да оставите 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);
}