Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Buscar todas as notícias e todos os comentários


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.