Non puoi farlo in una query:è meglio prendere la query che hai e post-elaborare la risposta risultante per ottenere la struttura dei dati di cui hai bisogno.
Per elaborare ulteriormente, qualsiasi query SQL può restituire solo una matrice di dati bidimensionale:una dimensione per le colonne e una per le righe corrispondenti. Nel tuo caso, ciò che stai effettivamente cercando è più simile a una tabella tridimensionale.
Nota anche che sulla tua richiesta come scritto verranno restituite tutte le news
dati più e più volte per ogni commento su ogni articolo. Questo è un uso inefficiente della larghezza di banda e delle risorse del server di database.
Probabilmente è più efficiente farlo in questo modo (in pseudocodice):
SELECT * FROM news
...
foreach ($rows as $row) {
$row['comments] = array();
$news[$row['id']] = $row;
}
SELECT * FROM comments
...
foreach ($rows as $row) {
$news[$row['news_id']]['comments'][] = $row;
}
La prima query ottiene tutti gli articoli di notizie e li inserisce in un array. La seconda query ottiene i commenti e accumula un array separato all'interno della struttura di ogni articolo di notizie.