sql >> Database teknologi >  >> RDS >> Mysql

Hvordan bringer man mere end én række (mysql) resultat inde i den samme variabel, når man kører en json_encode?

Hvis jeg forstod dig rigtigt, tabellen tPCN kan indeholde flere rækker forbundet med hvert PCR-nummer. Og du vil hente alle disse rækker og returnere dem i din JSON.

Hvis du vil opnå det, men også sørge for, at de to andre tabeller kun returnerer én række, så synes jeg simpelthen, at du skal fjerne JOIN til tPCN i din første forespørgsel, og opret derefter en anden forespørgsel for at hente tPCN rækker specifikt.

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

Dette vil producere noget JSON med denne slags struktur:

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

Du skal derefter ændre din JavaScript-kode for at kunne håndtere den nye struktur. Da jeg ikke ved præcis hvilke felter der kommer fra tPCN tabel, jeg kan ikke give dig et eksempel på det, men forhåbentlig er det klart, at du bliver nødt til at gå gennem arrayet og udlæse den samme HTML for hver post, du finder.

N.B. Som du kan se, omskrev jeg forespørgselskoden til at bruge forberedte sætninger og parametriserede forespørgsler, så du kan se, hvordan du skriver din kode på en sikker måde i fremtiden.

P.S. Du har en masse kode der i "succes"-funktionen bare for at indstille værdierne for individuelle felter. Du vil måske overveje at bruge en simpel JS-skabelonmotor for at gøre dette mindre omfattende og besværligt, og generere den HTML, du har brug for, med værdierne automatisk tilføjet på det rigtige sted. Men det er et separat problem, kun for vedligeholdelsen af ​​din kode



  1. Sådan får du det første element af XPath i Oracle

  2. MySQL returnerer maks. værdi eller null, hvis en kolonne ikke har nogen værdi

  3. PostgreSQL drop-rolle mislykkes på grund af standardprivilegier

  4. VBA's Case Changing-funktion