Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tìm nạp tất cả tin tức và tất cả các bình luận

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo mảng PHP từ MySQL với giá trị khóa từ cột id

  2. Có thể sử dụng SQL để sắp xếp theo ngày nhưng đặt ngày trống ở phía sau tập kết quả không?

  3. Truy vấn từ hai bảng trong báo cáo

  4. phpMyAdmin trên MySQL 8.0

  5. Cột không xác định của Laravel 'updated_at'