Vous ne pouvez pas faire cela en une seule requête. Il est préférable de prendre la requête que vous avez et de post-traiter la réponse résultante pour obtenir la structure de données dont vous avez besoin.
Pour aller plus loin - toute requête SQL ne peut renvoyer qu'un tableau de données à deux dimensions - une dimension pour les colonnes et une pour les lignes correspondantes. Dans votre cas, ce que vous recherchez ressemble plus à un tableau en trois dimensions.
Notez également que votre requête telle qu'elle est écrite renverra toutes les news
données maintes et maintes fois pour chaque commentaire contre chaque article. C'est une utilisation inefficace de la bande passante et des ressources du serveur de base de données.
C'est probablement plus efficace de faire comme ça (en pseudo-code) :
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 première requête obtient tous les articles de presse et les place dans un tableau. La deuxième requête obtient les commentaires et accumule un tableau séparé dans la structure de chaque article d'actualité.