sql >> Database >  >> RDS >> Mysql

Hoe kan ik meer dan één rij (mysql) resultaat binnen dezelfde variabele brengen bij het uitvoeren van een json_encode?

Als ik je goed heb begrepen, is de tabel tPCN kan meerdere rijen bevatten die aan elk PCR-nummer zijn gekoppeld. En u wilt al deze rijen ophalen en teruggeven in uw JSON.

Als je dat wilt bereiken, maar er ook voor wilt zorgen dat de andere twee tabellen slechts één rij retourneren, dan denk ik dat je eenvoudigweg de JOIN naar tPCN moet verwijderen in uw eerste zoekopdracht en maak vervolgens een tweede zoekopdracht om de tPCN . op te halen rijen specifiek.

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

Dit zal wat JSON produceren met dit soort structuur:

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

U moet dan uw JavaScript-code aanpassen om met de nieuwe structuur om te kunnen gaan. Aangezien ik niet precies weet welke velden uit de tPCN komen tabel, daar kan ik je geen voorbeeld van geven, maar hopelijk is het duidelijk dat je de array moet doorlopen en dezelfde HTML moet uitvoeren voor elk item dat je vindt.

NB Zoals u kunt zien, heb ik de querycode opnieuw geschreven om voorbereide instructies en geparametriseerde query's te gebruiken, zodat u kunt zien hoe u uw code in de toekomst op een veilige manier kunt schrijven.

PS Je hebt daar veel code in de "succes"-functie om de waarden van individuele velden in te stellen. Je zou kunnen overwegen om een ​​eenvoudige JS-templating-engine te gebruiken om dit minder uitgebreid en omslachtig te maken, en de HTML te genereren die je nodig hebt met de waarden die er automatisch aan worden toegevoegd op de juiste plaats. Maar dat is een apart probleem, alleen voor de onderhoudbaarheid van uw code



  1. Karaktergegevens gaan niet van php naar jQuery

  2. Hoe Oracle-fout ORA-01790 op te lossen?

  3. SQL - INDIEN BESTAAT UPDATE ANDERS INSERT INTO

  4. hoe u het aantal waarden in mysql kunt krijgen