Nie możesz tego zrobić w jednym zapytaniu - najlepiej wziąć otrzymane zapytanie i przetworzyć wynikową odpowiedź, aby uzyskać potrzebną strukturę danych.
Rozwijając dalej — każde zapytanie SQL może zwrócić tylko dwuwymiarową tablicę danych — jeden wymiar dla kolumn i jeden dla pasujących wierszy. W twoim przypadku to, czego tak naprawdę szukasz, przypomina bardziej trójwymiarowy stół.
Zwróć też uwagę, że w twoim zapytaniu tak, jak zostało napisane, zwróci wszystkie news
dane w kółko dla każdego komentarza do każdego artykułu. To nieefektywne wykorzystanie przepustowości i zasobów serwera bazy danych.
Prawdopodobnie bardziej wydajne jest zrobienie tego w ten sposób (w pseudokodzie):
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;
}
Pierwsze zapytanie pobiera wszystkie artykuły i umieszcza je w tablicy. Drugie zapytanie pobiera komentarze i gromadzi oddzielną tablicę w strukturze każdego artykułu z wiadomościami.