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

Come portare più di una riga (mysql) all'interno della stessa variabile durante l'esecuzione di json_encode?

Se ho capito bene, la tabella tPCN può contenere più righe associate a ciascun numero PCR. E vuoi recuperare tutte queste righe e restituirle nel tuo JSON.

Se vuoi raggiungere questo obiettivo, ma assicurati anche che le altre due tabelle restituiscano solo una riga, penso semplicemente che dovresti rimuovere JOIN su tPCN nella tua prima query, quindi crea una seconda query per recuperare il tPCN righe in particolare.

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

Questo produrrà alcuni JSON con questo tipo di struttura:

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

Dovrai quindi modificare il tuo codice JavaScript per poter gestire la nuova struttura. Dal momento che non so esattamente quali campi provengono da tPCN tabella, non posso darti un esempio per questo, ma spero sia chiaro che dovrai scorrere l'array e produrre lo stesso HTML per ogni voce che trovi.

NB Come puoi vedere, ho riscritto il codice della query per utilizzare istruzioni preparate e query parametrizzate, così puoi vedere come scrivere il tuo codice in modo sicuro in futuro.

PS Hai molto codice lì nella funzione "successo" solo per impostare i valori dei singoli campi. Potresti prendere in considerazione l'utilizzo di un semplice motore di modelli JS per renderlo meno dettagliato e ingombrante e generare l'HTML di cui hai bisogno con i valori aggiunti automaticamente al posto giusto. Ma questo è un problema separato, solo per la manutenibilità del tuo codice