Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Holen Sie sich alle Nachrichten und alle Kommentare

Sie können dies nicht in einer Abfrage tun - nehmen Sie am besten die Abfrage, die Sie haben, und verarbeiten Sie die resultierende Antwort nach, um die benötigte Datenstruktur zu erhalten.

Um es weiter auszuarbeiten - jede SQL-Abfrage kann nur ein zweidimensionales Datenarray zurückgeben - eine Dimension für die Spalten und eine für die übereinstimmenden Zeilen. In Ihrem Fall ist das, wonach Sie eigentlich suchen, eher eine dreidimensionale Tabelle.

Beachten Sie auch, dass Ihre Anfrage wie geschrieben alle news zurückgibt Daten immer und immer wieder für jeden Kommentar zu jedem Artikel. Das ist eine ineffiziente Nutzung von Bandbreite und Ressourcen des Datenbankservers.

Es ist wahrscheinlich effizienter, es so zu machen (in 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;
}

Die erste Abfrage ruft alle Nachrichtenartikel ab und fügt sie in ein Array ein. Die zweite Abfrage ruft die Kommentare ab und sammelt ein separates Array innerhalb der Struktur jedes Nachrichtenartikels.