Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да доведа резултат от повече от един ред (mysql) в една и съща променлива, когато изпълнявате json_encode?

Ако съм те разбрал правилно, таблицата tPCN може да съдържа множество редове, свързани с всеки PCR номер. И искате да извлечете всички тези редове и да ги върнете във вашия JSON.

Ако искате да постигнете това, но също така да сте сигурни, че другите две таблици връщат само един ред, тогава мисля, че просто трябва да премахнете JOIN към tPCN в първата си заявка и след това създайте втора заявка за извличане на tPCN редове конкретно.

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

Това ще създаде някои JSON с този вид структура:

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

След това ще трябва да промените своя JavaScript код, за да можете да се справите с новата структура. Тъй като не знам точно кои полета идват от tPCN таблица, не мога да ви дам пример за това, но се надяваме, че е ясно, че ще трябва да преминете през масива и да изведете един и същ HTML за всеки запис, който намерите.

N.B. Както можете да видите, пренаписах кода на заявката, за да използвам подготвени изрази и параметризирани заявки, така че можете да видите как да пишете кода си по сигурен начин в бъдеще.

P.S. Имате много код във функцията "success", само за да зададете стойностите на отделните полета. Може да искате да обмислите използването на проста машина за шаблони на JS, за да направите това по-малко многословно и тромаво и да генерирате необходимия HTML със стойностите, автоматично добавени в него на правилното място. Но това е отделен въпрос, само за поддръжката на вашия код



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. по-добре ли е да избягате/кодирате въведеното от потребителя, преди да го съхраните в базата данни, или да го съхраните както е в базата данни и да го избягате, докато извличате?

  2. Не мога да се свържа с локален MySQL сървър чрез сокет '/var/mysql/mysql.sock' (38)

  3. SQL SERVER – SQL_NO_CACHE и ОПЦИЯ (ПРЕКОМПИЛИРАНЕ)

  4. Как да свиете/изчистите ibdata1 файл в MySQL

  5. Съхранената процедура на mysql е по-бавна 20 пъти от стандартната заявка