Nemůžete to udělat v jednom dotazu – nejlepší je vzít dotaz, který máte, a následně zpracovat výslednou odpověď, abyste získali datovou strukturu, kterou potřebujete.
Pro další upřesnění – jakýkoli dotaz SQL může vrátit pouze dvourozměrné pole dat – jeden rozměr pro sloupce a jeden pro odpovídající řádky. Ve vašem případě to, co vlastně hledáte, je spíše trojrozměrná tabulka.
Všimněte si také, že na váš dotaz se vrátí všechny news
data znovu a znovu pro každý komentář ke každému článku. To je neefektivní využití šířky pásma a zdrojů z databázového serveru.
Pravděpodobně je efektivnější to udělat takto (v pseudokódu):
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;
}
První dotaz získá všechny zpravodajské články a vloží je do pole. Druhý dotaz získá komentáře a shromáždí samostatné pole ve struktuře každého zpravodajského článku.