sql >> Database teknologi >  >> RDS >> Mysql

Hent alle nyheder og alle kommentarer

Du kan ikke gøre det i én forespørgsel - bedst at tage den forespørgsel, du har, og efterbehandle det resulterende svar for at få den datastruktur, du har brug for.

For at uddybe yderligere - enhver SQL-forespørgsel kan kun returnere en todimensionel række af data - en dimension for kolonnerne og en for de matchende rækker. I dit tilfælde er det, du rent faktisk leder efter, mere som et tredimensionelt bord.

Bemærk også, at på din forespørgsel som skrevet vil returnere alle news data igen og igen for hver kommentar til hver artikel. Det er en ineffektiv brug af båndbredde og ressource fra databaseserveren.

Det er nok mere effektivt at gøre det på denne måde (i pseudo-kode):

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;
}

Den første forespørgsel henter alle nyhedsartikler og placerer dem i et array. Den anden forespørgsel henter kommentarerne og akkumulerer et separat array i hver nyhedsartikels struktur.



  1. Opdel kolonne i flere rækker i Postgres

  2. MySQL binær vs char tegnsæt binær

  3. Hvordan viser jeg kørende processer i Oracle DB?

  4. Forstå gruppe efter klausul i SQL Server - SQL Server / TSQL selvstudium del 130