Você não pode fazer isso em uma consulta - é melhor pegar a consulta que você recebeu e pós-processar a resposta resultante para obter a estrutura de dados necessária.
Para elaborar ainda mais - qualquer consulta SQL pode retornar apenas uma matriz bidimensional de dados - uma dimensão para as colunas e outra para as linhas correspondentes. No seu caso, o que você está realmente procurando é mais como uma mesa tridimensional.
Observe também que em sua consulta, conforme escrito, retornará todas as
news
dados repetidamente para cada comentário em cada artigo. Esse é um uso ineficiente de largura de banda e recursos do servidor de banco de dados. Provavelmente é mais eficiente fazer assim (em pseudo-código):
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;
}
A primeira consulta obtém todos os artigos de notícias e os coloca em uma matriz. A segunda consulta obtém os comentários e acumula uma matriz separada dentro da estrutura de cada artigo de notícias.