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

Kết hợp kết quả từ hai bảng thành JSON

Mã này có tạo ra đầu ra bạn cần không?

$result_w = $conn->query("SELECT * FROM words;");
$results_w = $result_w->fetch_all(MYSQLI_ASSOC);

$words_per_paragraph = [];
foreach($results_w as $key => $row) {
    $words_per_paragraph[$row['paragraph_no']][] = $row;
}

$result_p = $conn->query("SELECT * FROM paragraph;");
$results_p = $result_p->fetch_all(MYSQLI_ASSOC);

$data = [];
foreach($results_p as $key => $row) {
    $p_no = $row['paragraph_no'];
    $words = [];
    if(array_key_exists($p_no, $words_per_paragraph)) {
        $words = $words_per_paragraph[$p_no];
    }
    $data[$p_no] = [
        'words' => $words,
        'paragraph' => $row
    ];
}

Nội dung của $data (Tôi chưa thêm bất kỳ từ nào vào đoạn 2 cho mục đích thử nghiệm):

{
   "1":{
      "words":{
         "id":"4",
         "book_no":"1",
         "paragraph_no":"1",
         "word_no":"4",
         "word":"you"
      },
      "paragraph":{
         "id":"1",
         "book_no":"1",
         "paragraph_no":"1",
         "paragraph":"hello how are you"
      }
   },
   "2":{
      "words":[

      ],
      "paragraph":{
         "id":"3",
         "book_no":"1",
         "paragraph_no":"2",
         "paragraph":"I'm fine and you?"
      }
   }
}

Có thể bạn có thể thay đổi cấu trúc bảng cơ sở dữ liệu của mình để nhận mọi thứ trong một câu lệnh.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để Left Join / IS NULL loại bỏ các bản ghi có trong một bảng và không có trong bảng kia?

  2. MySQL với Entity Framework - tôi đang làm gì sai?

  3. Xử lý dữ liệu từ nhiều trường lựa chọn

  4. Không cho phép tuần tự hóa 'Đóng cửa' - laravel

  5. Mysql - Tính tổng của nhiều bảng đã kết hợp