Jedno zapytanie jest w porządku. Jak masz i chyba lepszy wariant. Musisz zastanowić się, co jest bardziej wydajne, aby MySQL odciążył, czy sieć i PHP. O wiele lepiej jest pozwolić PHP na przeciążenie niż MySQL, ale tam, gdzie MySQL ma „wbudowane” funkcje, takie jak pożądane grupowanie, opuść MySQL i zapisz ruch sieciowy.
Aby to zadziałało:dodaj do zapytania „ORDER BY p.post_id, pc.comment_id” — w ten sposób wyniki zostaną uporządkowane.
Następnie, jeśli musisz wbudować w tablicę (chociaż możesz być w stanie przetwarzać bezpośrednio bez użycia tablicy, metoda będzie podobna):
$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);
}