Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wprowadzić więcej niż jeden wynik wiersza (mysql) do tej samej zmiennej podczas uruchamiania json_encode?

Jeśli dobrze zrozumiałem, tabela tPCN może zawierać wiele wierszy związanych z każdym numerem PCR. I chcesz pobrać wszystkie te wiersze i zwrócić je w swoim JSON.

Jeśli chcesz to osiągnąć, ale jednocześnie upewnij się, że pozostałe dwie tabele zwracają tylko jeden wiersz, myślę, że po prostu powinieneś usunąć JOIN to tPCN w pierwszym zapytaniu, a następnie utwórz drugie zapytanie, aby pobrać tPCN wierszy konkretnie.

$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);

Spowoduje to utworzenie pliku JSON o takiej strukturze:

{
  "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",
    }
  ]
}

Będziesz wtedy musiał zmienić swój kod JavaScript, aby móc poradzić sobie z nową strukturą. Ponieważ nie wiem dokładnie, które pola pochodzą z tPCN tabeli, nie mogę podać przykładu, ale mam nadzieję, że jasne jest, że będziesz musiał przejść przez tablicę i wyprowadzić ten sam kod HTML dla każdego znalezionego wpisu.

Uwaga Jak widać, przepisałem kod zapytania, aby używał przygotowanych instrukcji i sparametryzowanych zapytań, dzięki czemu możesz zobaczyć, jak w przyszłości napisać swój kod w bezpieczny sposób.

PS W funkcji "sukces" jest dużo kodu, tylko po to, żeby ustawić wartości poszczególnych pól. Możesz rozważyć użycie prostego silnika szablonów JS, aby uczynić go mniej szczegółowym i nieporęcznym, i wygenerować potrzebny kod HTML z automatycznie dodanymi wartościami we właściwym miejscu. Ale to osobna kwestia, dotyczy tylko łatwości utrzymania kodu



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw do tabeli za pomocą For In Range i klawiszy wartości

  2. mysqldump Błąd 1045 Odmowa dostępu pomimo poprawnych haseł itp

  3. Poprawa wydajności zapytań przestrzennych MySQL

  4. zapisz var_dump do pliku tekstowego

  5. Jak używać funkcji Rand w połączeniu z Union w MySQL?