来自数据库的多个 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
$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);
有几种方法可以做到这一点。以上只是一种方式。
我有两个表 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 |
$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);
有几种方法可以做到这一点。以上只是一种方式。