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