Mysql
 sql >> Database >  >> RDS >> Mysql

Il ciclo di MySQL ha lasciato il join in php rispetto a 2 query separate

Una domanda va bene. Come hai tu, e probabilmente l'opzione migliore. Devi capire quale è più efficiente, per lasciare che MySQL prenda la tensione, o la rete e PHP lo facciano. È molto meglio lasciare che PHP prenda la tensione rispetto a MySQL, ma dove MySQL ha funzionalità "incorporate", come il raggruppamento che desideri, quindi abbandona MySQL e salva il traffico di rete.

Per farlo funzionare:aggiungi "ORDER BY p.post_id, pc.comment_id" alla tua query - questo ottiene i risultati in ordine.

Quindi, se devi creare un array (sebbene tu possa essere in grado di elaborare direttamente senza utilizzare un array, il metodo sarebbe simile):

$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);
}