Non conoscendo la struttura del tuo database, dovrebbe assomigliare a questo. Nota che dovresti sostituire *
caratteri con elenchi di colonne più espliciti di cui hai effettivamente bisogno.
SELECT p.*, c.*, u.* FROM posts p
LEFT JOIN comments c ON c.post_id = p.id
LEFT JOIN users u ON u.id = p.author_id
Nota che se stai solo cercando di ottenere conteggi, somme e cose del genere è una buona idea memorizzare nella cache alcune di queste informazioni. Ad esempio, potresti voler memorizzare nella cache il conteggio dei commenti nella tabella dei post invece di contarli ogni query. Conta e aggiorna il conteggio dei commenti solo quando aggiungi/rimuovi un commento.
MODIFICA: Mi sono reso conto che volevi anche allegare i dati dell'utente a ogni commento. Puoi UNIRTI allo stesso tavolo più di una volta ma diventa brutto. Questo potrebbe trasformarsi in una query davvero costosa. Includo anche un esempio di come alias colonne in modo che sia meno confuso:
SELECT p.*, c.*, u.name as post_author, u2.name as comment_author FROM posts p
LEFT JOIN comments c ON c.post_id = p.id
LEFT JOIN users u ON u.id = p.author_id
LEFT JOIN users u2 ON u2.id = c.author_id