Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment amener plus d'une ligne (mysql) dans la même variable lors de l'exécution d'un json_encode ?

Si j'ai bien compris, la table tPCN peut contenir plusieurs lignes associées à chaque numéro PCR. Et vous voulez récupérer toutes ces lignes et les renvoyer dans votre JSON.

Si vous voulez y parvenir, mais assurez-vous également que les deux autres tables ne renvoient qu'une seule ligne, alors je pense simplement que vous devriez supprimer le JOIN à tPCN dans votre première requête, puis créez une deuxième requête pour récupérer le tPCN lignes spécifiquement.

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

Cela produira du JSON avec ce type de structure :

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

Vous devrez alors modifier votre code JavaScript pour pouvoir vous adapter à la nouvelle structure. Comme je ne sais pas exactement quels champs proviennent du tPCN table, je ne peux pas vous donner d'exemple pour cela, mais j'espère qu'il est clair que vous devrez parcourir le tableau et générer le même code HTML pour chaque entrée trouvée.

N.B. Comme vous pouvez le voir, j'ai réécrit le code de la requête pour utiliser des instructions préparées et des requêtes paramétrées, afin que vous puissiez voir comment écrire votre code de manière sécurisée à l'avenir.

PS Vous avez beaucoup de code dans la fonction "succès" juste pour définir les valeurs des champs individuels. Vous voudrez peut-être envisager d'utiliser un simple moteur de création de modèles JS pour le rendre moins verbeux et encombrant, et générer le code HTML dont vous avez besoin avec les valeurs automatiquement ajoutées au bon endroit. Mais c'est un problème distinct, juste pour la maintenabilité de votre code