Bạn không thể làm điều đó trong một truy vấn - tốt nhất hãy sử dụng truy vấn bạn đã có và xử lý hậu câu trả lời kết quả để có được cấu trúc dữ liệu bạn cần.
Để giải thích thêm - bất kỳ truy vấn SQL nào cũng chỉ có thể trả về mảng dữ liệu hai chiều - một chiều cho các cột và một cho các hàng phù hợp. Trong trường hợp của bạn, những gì bạn thực sự theo đuổi giống như một bảng ba chiều hơn.
Cũng lưu ý rằng trên truy vấn của bạn như được viết sẽ trả về tất cả news
dữ liệu lặp đi lặp lại cho mỗi nhận xét đối với mỗi bài báo. Đó là việc sử dụng không hiệu quả băng thông và tài nguyên từ máy chủ cơ sở dữ liệu.
Có lẽ sẽ hiệu quả hơn nếu làm như thế này (trong mã giả):
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;
}
Truy vấn đầu tiên lấy tất cả các bài báo và đặt chúng vào một mảng. Truy vấn thứ hai nhận các nhận xét và tích lũy một mảng riêng biệt trong cấu trúc của mỗi bài báo.