sql >> Base de Datos >  >> RDS >> Mysql

Obtener todas las noticias y todos los comentarios

No puede hacer eso en una consulta; lo mejor es tomar la consulta que tiene y procesar posteriormente la respuesta resultante para obtener la estructura de datos que necesita.

Para elaborar más, cualquier consulta SQL solo puede devolver una matriz bidimensional de datos:una dimensión para las columnas y otra para las filas correspondientes. En su caso, lo que realmente busca es más como una tabla tridimensional.

Tenga en cuenta también que en su consulta tal como está escrita devolverá todas las news datos una y otra vez para cada comentario contra cada artículo. Eso es un uso ineficiente del ancho de banda y los recursos del servidor de la base de datos.

Probablemente sea más eficiente hacerlo así (en pseudocó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;
}

La primera consulta obtiene todos los artículos de noticias y los coloca en una matriz. La segunda consulta obtiene los comentarios y acumula una matriz separada dentro de la estructura de cada artículo de noticias.