私があなたを正しく理解していれば、テーブルtPCN
各PCR番号に関連付けられた複数の行を含めることができます。そして、これらすべての行をフェッチして、JSONで返します。
それを実現したいが、他の2つのテーブルが1行だけを返すようにする場合は、単にJOIN to tPCN
を削除する必要があると思います。 最初のクエリで、次に2番目のクエリを作成してtPCN
をフェッチします 特に行。
$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);
これにより、この種の構造を持つJSONが生成されます:
{
"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",
}
]
}
次に、新しい構造を処理できるようにJavaScriptコードを修正する必要があります。どのフィールドがtPCN
から来ているのか正確にはわからないので 表では、その例を示すことはできませんが、配列をループして、見つかったエントリごとに同じHTMLを出力する必要があることは明らかです。
N.B.ご覧のとおり、プリペアドステートメントとパラメーター化されたクエリを使用するようにクエリコードを書き直したので、将来的に安全な方法でコードを作成する方法を確認できます。
P.S.個々のフィールドの値を設定するためだけに、「success」関数に多くのコードがあります。単純なJSテンプレートエンジンを使用してこれを冗長で面倒なものにし、適切な場所に値が自動的に追加された必要なHTMLを生成することを検討することをお勧めします。ただし、これは別の問題であり、コードの保守性のためだけです