Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Percorrer o MySQL deixou a junção em php vs. 2 consultas separadas


Uma consulta está bem. Como você tem, e provavelmente a melhor opção. Você tem que descobrir o que é mais eficiente, para deixar o MySQL aguentar o esforço, ou a rede e o PHP suportar o esforço. É muito melhor deixar o PHP se esforçar do que o MySQL, mas onde o MySQL tem recursos "incorporados", como o agrupamento que você deseja, deixe o MySQL e salve o tráfego de rede.

Para fazer isso funcionar:adicione "ORDER BY p.post_id, pc.comment_id" à sua consulta - isso coloca os resultados em ordem.

Então, se você deve construir em uma matriz (embora você possa processar diretamente sem usar uma matriz, o método seria semelhante):
$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);
}