1つのクエリでそれを行うことはできません。取得したクエリを取得し、結果の回答を後処理して、必要なデータ構造を取得するのが最善です。
さらに詳しく説明すると、SQLクエリはデータの2次元配列のみを返すことができます。1つは列用、もう1つは一致する行用です。あなたの場合、あなたが実際に求めているのは、より3次元のテーブルのようなものです。
また、記述されたクエリでは、すべてのnews
が返されることにも注意してください。 各記事に対するコメントごとに何度も何度もデータ。これは、データベースサーバーからの帯域幅とリソースの非効率的な使用です。
このように(擬似コードで)行う方がおそらく効率的です:
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;
}
最初のクエリはすべてのニュース記事を取得し、それらを配列に配置します。 2番目のクエリはコメントを取得し、各ニュース記事の構造内に個別の配列を蓄積します。