Вы не можете сделать это в одном запросе - лучше всего взять полученный запрос и постобработать полученный ответ, чтобы получить необходимую структуру данных.
Более подробно: любой запрос SQL может возвращать только двумерный массив данных - одно измерение для столбцов и одно для соответствующих строк. В вашем случае то, что вам нужно, больше похоже на трехмерную таблицу.
Обратите также внимание, что по вашему запросу в письменном виде будет возвращаться все данные news
снова и снова для каждого комментария к каждой статье. Это неэффективное использование пропускной способности и ресурсов сервера базы данных.
Вероятно, более эффективно сделать это так (в псевдокоде):
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;
}
Первый запрос получает все новостные статьи и помещает их в массив. Второй запрос получает комментарии и накапливает отдельный массив в структуре каждой новостной статьи.