来自数据库的多个 json 使用 php

Multiple json from a database using php

我有两个表 ERRORS 和 PRODUCTS,它们由两列相关(error_code 和问题)我想使用 php 获得响应 json。这些是我的文件:

表格:

错误:

id_error error_code issue cause solution
1 A01 issue1 cause1.1 solution1.1
2 A01 issue1 cause1.2 solution1.2
3 A01 issue1 cause1.3 solution1.3
4 A02 issue2 cause2.1 solution2.1

产品:

id_error product issue
A01 P1 issue1
A01 P2 issue1
A02 P1 issue2

这是我的 .php 文件

<?php
include('functions.php');
//$tipo = $_GET['txtTi'];
$array = array();   
if ($resultset = getSQLResultSet("
    SELECT errors.error_code,
           errors.issue,
           errors.cause,
           errors.solution,
           products.error_code,
           products.product,
           products.issue 
    FROM errors 
    JOIN products
        ON errors .issue = products.issue
            AND errors.error_code = products.error_code
    WHERE errors.error_code = 'A01'")
){
    $p = array();
    $c = array ();
    $s = array();
    while ($row = $resultset->fetch_array(MYSQLI_NUM)){
        $e = array();
        $e['error_code'] = $row[0];
        $e['issue'] = $row[1];
        $c['cause'] = $row[2];
        $e['cause'] = $c;
        $s['solution'] = $row[3];
        $e['solution'] = $s;
        $p['product'] = $row[5];
        $e['products'] = $p;
        array_push($array,$e);
    }
    echo json_encode($array);
}
?>

我有这个json:

[
   {
      "error_code":"A01",
      "issue":"issue1",
      "cause":{
         "cause":"cause1.1"
      },
      "solution":{
         "solution":"solution1.1"
      },
      "products":{
         "product":"P1"
      }
   },
{
      "error_code":"A01",
      "issue":"issue1",
      "cause":{
         "cause":"cause1.2"
      },
      "solution":{
         "solution":"solution1.2"
      },
      "products":{
         "product":"P1"
      }
   },{
      "error_code":"A01",
      "issue":"issue1",
      "cause":{
         "cause":"cause1.3"
      },
      "solution":{
         "solution":"solution1.3"
      },
      "products":{
         "product":"P1"
      }
   },
(...)

]

但这就是我想要的json

[
{
 "error_code":"A01",
 "issue":"issue1",
 "cause":{
         "cause":"cause1.1",
         "cause":"cause1.2",
         "cause":"cause1.3"
          },
 "solution":{
          "solution":"solution1.1",
          "solution":"solution1.2",
          "solution":"solution1.3"
          },
 "products":{
          "product":"P1",
          "product":"P2"
          }
       }
]

查询下表中的数据:

SELECT error_code, issue, cause, NULL solution, NULL product
FROM ERRORS
UNION ALL
SELECT error_code, issue, NULL, solution, NULL
FROM ERRORS
UNION ALL
SELECT id_error, issue, NULL, NULL, product
FROM PRODUCTS
ORDER BY error_code, issue, cause IS NULL, solution IS NULL

(参见 fiddle),然后在您的 PHP 代码中迭代此行集。

PS。由于键名重复,您无法在 MySQL 将此数据汇总到所需的 JSON。

我想你可以将你的数据库行分组并用逗号分隔它们以便它们是扁平的,然后在你迭代时 unpack/explode 它们。

SELECT errors.error_code,
       errors.issue,
       GROUP_CONCAT(DISTINCT errors.cause) AS causes,
       GROUP_CONCAT(DISTINCT errors.solution) AS solutions,
       GROUP_CONCAT(DISTINCT products.product) AS products
FROM errors 
JOIN products
    ON errors.issue = products.issue
       AND errors.error_code = products.error_code
WHERE errors.error_code = 'A01'
GROUP BY errors.error_code,
         errors.issue;
error_code issue causes solutions products
A01 issue1 cause1.1,cause1.2,cause1.3 solution1.1,solution1.2,solution1.3 P1,P2
A01 issue2 cause1.4 solution1.4 P4

View on DB Fiddle

$result = [];
while ($row = $resultset->fetch_array(MYSQLI_ASSOC)) {
    $result[] = [
        'error_code' => $row['error_code'],
        'issue' => $row['issue'],
        'causes' => explode(',', $row['causes']),
        'solutions' => explode(',', $row['solutions']),
        'products' => explode(',', $row['products'])
    ];
}
echo json_encode($result);

有几种方法可以做到这一点。以上只是一种方式。