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

MySQL:Yêu cầu tạo một đối tượng JSON với Array

Bạn có thể THAM GIA TRÁI để nhận tất cả dữ liệu bạn cần, khi lặp lại dữ liệu đó, bạn chỉ cần quan tâm đến cách bạn xử lý dữ liệu nào.

$lastArticleId = null;
$comments = [];
$elements = [];
$sql = 'SELECT Articles.*, Comments.content AS comment, Comments.username FROM Articles LEFT JOIN Comments ON Articles.id = Comments.id_article';
$result = $pdo->query($sql);
foreach ($result->fetchAll(PDO::FETCH_OBJ) as $dataset) {
    if($lastArticleId !== $dataset->id){
        $lastArticleId = $dataset->id;
        $elements[$lastArticleId] = [
            'id'       => $dataset->id,
            'title'    => $dataset->title,
            'content'  => $dataset->content,
            'date'     => $dataset->date,
            'comments' => [],
        ];
    }
    $comments[$lastArticleId][] = [
        'content' => $dataset->comment,
        'username' => $dataset->username,
    ];
}
foreach ($elements as $key => $article) {
    $article['comments'] = $comments[$key];
    $fullData[] = $article;
}
echo json_encode($fullData);

Nhưng :Chỉ vì bạn có thể, không có nghĩa là bạn nên làm.

Việc tách tác vụ này thành hai truy vấn sẽ dễ viết và dễ đọc hơn rất nhiều. Vì vậy, nếu sau này bạn vì một lý do nào đó cần chạm vào đoạn mã này (hoặc người khác), anh ấy sẽ rất vui vì bạn đã chọn cách tiếp cận truy vấn 2.

Ngoài ra, bạn nên chia nhỏ các nhiệm vụ, vì vậy lý tưởng nhất là bạn nên tạo các phương thức trong lớp truy cập cơ sở dữ liệu của mình getAllArticles() và một cái khác getCommentsByArticleId($id_article) . Bằng cách này, bạn có thể tìm nạp tất cả các nhận xét mà không cần phải tải toàn bộ bài viết.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thoát khỏi các dấu nháy đơn trong PHP / MySQL insert không hoạt động

  2. Cơ chế nội bộ của JDBC ResultSet để tìm nạp các tập dữ liệu lớn

  3. Làm thế nào để chỉ định đối chiếu với PDO mà không cần ĐẶT TÊN?

  4. Tìm người dùng trong Laravel theo tên người dùng

  5. Truy vấn cho N đầu mỗi mã nhóm hoạt động cho MySQL nhưng kết quả khác với MariaDB