U kunt dat niet in één query doen. U kunt het beste de query die u heeft nemen en het resulterende antwoord nabewerken om de gegevensstructuur te krijgen die u nodig hebt.
Om verder uit te werken - elke SQL-query kan alleen een tweedimensionale reeks gegevens retourneren - één dimensie voor de kolommen en één voor de overeenkomende rijen. In jouw geval lijkt wat je eigenlijk zoekt meer op een driedimensionale tabel.
Merk ook op dat op uw vraag zoals geschreven al het news
. zal worden geretourneerd gegevens over en weer voor elke opmerking tegen elk artikel. Dat is een inefficiënt gebruik van bandbreedte en bronnen van de databaseserver.
Het is waarschijnlijk efficiënter om het als volgt te doen (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;
}
De eerste zoekopdracht haalt alle nieuwsartikelen op en plaatst ze in een array. De tweede zoekopdracht haalt de commentaren op en verzamelt een aparte array binnen de structuur van elk nieuwsartikel.