sql >> Databáze >  >> RDS >> Mysql

Jak přenést více než jeden výsledek (mysql) do stejné proměnné při spuštění json_encode?

Pokud jsem dobře pochopil, tabulka tPCN může obsahovat více řádků spojených s každým číslem PCR. A chcete načíst všechny tyto řádky a vrátit je ve svém JSON.

Pokud toho chcete dosáhnout, ale zároveň se ujistit, že další dvě tabulky vracejí pouze jeden řádek, pak si myslím, že byste měli jednoduše odstranit JOIN to tPCN v prvním dotazu a poté vytvořte druhý dotaz pro načtení tPCN řádky konkrétně.

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

To vytvoří nějaký JSON s tímto typem struktury:

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

Poté budete muset upravit svůj kód JavaScript, abyste byli schopni pracovat s novou strukturou. Protože přesně nevím, která pole pocházejí z tPCN tabulka, nemohu vám k tomu dát příklad, ale doufejme, že je jasné, že budete muset procházet polem a pro každou položku, kterou najdete, vygenerovat stejný kód HTML.

N.B. Jak můžete vidět, přepsal jsem kód dotazu tak, aby používal připravené příkazy a parametrizované dotazy, takže můžete vidět, jak v budoucnu psát svůj kód bezpečným způsobem.

P.S. Máte tam spoustu kódu ve funkci "úspěch" jen pro nastavení hodnot jednotlivých polí. Možná budete chtít zvážit použití jednoduchého šablonovacího modulu JS, aby to bylo méně podrobné a těžkopádné, a vygenerujte požadovaný HTML s hodnotami automaticky přidanými do něj na správném místě. Ale to je samostatný problém, jen kvůli udržovatelnosti vašeho kódu



  1. Použijte primární klíč citlivý na zvýraznění v MySQL

  2. Dotaz Postgresql 9.4 se postupně zpomaluje, když se připojujete k TSTZRANGE pomocí &&

  3. Závažná chyba:Volání nedefinované metody mysqli_stmt::get_result()

  4. Dva primární klíče specifikované v databázi MySQL