sql >> Databasteknik >  >> RDS >> Mysql

Hur tar man med mer än en rad (mysql) resultat i samma variabel när man kör en json_encode?

Om jag förstod dig rätt, tabellen tPCN kan innehålla flera rader associerade med varje PCR-nummer. Och du vill hämta alla dessa rader och returnera dem i din JSON.

Om du vill uppnå det, men också se till att de andra två tabellerna bara returnerar en rad, så tycker jag helt enkelt att du ska ta bort JOIN till tPCN i din första fråga och skapa sedan en andra fråga för att hämta tPCN rader 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);

Detta kommer att producera lite JSON med den här typen av 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 måste då ändra din JavaScript-kod för att kunna hantera den nya strukturen. Eftersom jag inte vet exakt vilka fält som kommer från tPCN tabell, jag kan inte ge dig ett exempel på det, men förhoppningsvis är det klart att du måste gå igenom arrayen och mata ut samma HTML för varje post du hittar.

N.B. Som du kan se skrev jag om frågekoden för att använda förberedda satser och parametriserade frågor, så att du kan se hur du skriver din kod på ett säkert sätt i framtiden.

P.S. Du har mycket kod där i "framgång"-funktionen bara för att ställa in värdena för enskilda fält. Du kanske vill överväga att använda en enkel JS-mallmotor för att göra detta mindre omfattande och krångligt, och generera den HTML du behöver med värdena som automatiskt läggs till på rätt plats. Men det är en separat fråga, bara för att din kod ska kunna underhållas



  1. Hur man ändrar begränsning

  2. Hur skapar man en funktion som returnerar högsta id?

  3. Hur NOW() fungerar i MariaDB

  4. Använda tidszoner i en PHP-webbapplikation