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

Làm thế nào để mang lại nhiều hơn một hàng (mysql) kết quả bên trong cùng một biến khi chạy json_encode?

Nếu tôi hiểu bạn đúng, bảng tPCN có thể chứa nhiều hàng được liên kết với mỗi số PCR. Và bạn muốn tìm nạp tất cả các hàng này và trả lại chúng trong JSON của mình.

Nếu bạn muốn đạt được điều đó, nhưng cũng đảm bảo rằng hai bảng khác chỉ trả về một hàng, thì tôi nghĩ đơn giản là bạn nên xóa JOIN thành tPCN trong truy vấn đầu tiên của bạn, rồi tạo truy vấn thứ hai để tìm nạp tPCN các hàng cụ thể.

$output = [];
$stmt = $dbConnected->prepare("SELECT * FROM change_management.tPCR INNER JOIN change_management.tcomplement ON change_management.tPCR.PCRNo = change_management.tcomplement.PCRNo WHERE tPCR.PCRNo = ?");
$stmt->bind_param('s', $_POST['pcr_number']);
$stmt->execute();
$result = $stmt->get_result();

//select a single row from the result and assign it as the output variable
if ($row = $result->fetch_assoc()) {
    $output = $row;
}

$stmt2 = $dbConnected->prepare("SELECT * FROM change_management.tPCN WHERE PCRNo = ?");
$stmt2->bind_param('s', $_POST['pcr_number']);
$stmt2->execute();
$result2 = $stmt2->get_result();
$output["tPCN"] = array(); //create a new property to put the tPCN rows in

//loop through all the tPCN rows and append them to the output
while ($row2 = $result2->fetch_assoc()) {
    $output["tPCN"][] = $row2;
}

echo json_encode($output);

Điều này sẽ tạo ra một số JSON với loại cấu trúc này:

{
  "PCRNo": "ABC",
  "CreationDate": "2019-08-07",
  "Name": "A N Other",
  //...and all your other properties, until the new one:
  "tPCN": [
    {
      "SomeProperty": "SomeValue",
      "SomeOtherProperty": "SomeOtherValue",
    },
    {
      "SomeProperty": "SomeSecondValue",
      "SomeOtherProperty": "SomeOtherSecondValue",
    }
  ]
}

Sau đó, bạn sẽ cần phải sửa đổi mã JavaScript của mình để có thể xử lý cấu trúc mới. Vì tôi không biết chính xác trường nào đến từ tPCN , tôi không thể cung cấp cho bạn một ví dụ về điều đó, nhưng hy vọng rõ ràng rằng bạn sẽ cần phải lặp qua mảng và xuất ra cùng một HTML cho mỗi mục bạn tìm thấy.

N.B. Như bạn có thể thấy, tôi đã viết lại mã truy vấn để sử dụng các câu lệnh đã chuẩn bị và các truy vấn được tham số hóa, vì vậy bạn có thể thấy cách viết mã của mình một cách an toàn trong tương lai.

P.S. Bạn có rất nhiều mã ở đó trong hàm "thành công" chỉ để đặt giá trị của các trường riêng lẻ. Bạn có thể muốn xem xét sử dụng một công cụ tạo khuôn mẫu JS đơn giản để làm cho điều này ít dài dòng và rườm rà hơn, đồng thời tạo HTML bạn cần với các giá trị tự động được thêm vào nó ở đúng vị trí. Nhưng đó là một vấn đề riêng biệt, chỉ vì khả năng bảo trì mã của bạn



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kích thước tối đa của cơ sở dữ liệu MySQL trong phiên bản 5 trở lên là bao nhiêu?

  2. Cách tốt nhất để xử lý các phiên cho một trang PHP trên nhiều máy chủ là gì?

  3. Làm thế nào để tìm các chỉ mục bị thiếu trong MySQL?

  4. Thêm cột danh sách được đánh số vào truy vấn MySQL trả về

  5. Cách sử dụng FIND_IN_SET bằng cách sử dụng danh sách dữ liệu