处理之前的数据
头和行在一起显示
// 执行SQL查询后的原始数据(假设查询返回3条记录)
$rawData = [
[
'wip_entity_name' => 'JOB001',
'primary_item' => 'ITEM001',
'primary_name' => '主产品1',
'primary_desc' => '主产品描述1',
'start_quantity' => 100,
'quantity_completed' => 50,
'segment1' => 'COMP001',
'item_name' => '组件1',
'item_desc' => '组件1描述',
'operation_seq_num' => 10,
'required_quantity' => 2
],
[
'wip_entity_name' => 'JOB001',
'primary_item' => 'ITEM001',
'primary_name' => '主产品1',
'primary_desc' => '主产品描述1',
'start_quantity' => 100,
'quantity_completed' => 50,
'segment1' => 'COMP002',
'item_name' => '组件2',
'item_desc' => '组件2描述',
'operation_seq_num' => 20,
'required_quantity' => 1
],
[
'wip_entity_name' => 'JOB002',
'primary_item' => 'ITEM002',
'primary_name' => '主产品2',
'primary_desc' => '主产品描述2',
'start_quantity' => 200,
'quantity_completed' => 80,
'segment1' => 'COMP003',
'item_name' => '组件3',
'item_desc' => '组件3描述',
'operation_seq_num' => 30,
'required_quantity' => 5
]
];
// 原始数据对应的JSON表示
/*
[
{
"wip_entity_name": "JOB001",
"primary_item": "ITEM001",
"primary_name": "主产品1",
"primary_desc": "主产品描述1",
"start_quantity": 100,
"quantity_completed": 50,
"segment1": "COMP001",
"item_name": "组件1",
"item_desc": "组件1描述",
"operation_seq_num": 10,
"required_quantity": 2
},
{
"wip_entity_name": "JOB001",
"primary_item": "ITEM001",
"primary_name": "主产品1",
"primary_desc": "主产品描述1",
"start_quantity": 100,
"quantity_completed": 50,
"segment1": "COMP002",
"item_name": "组件2",
"item_desc": "组件2描述",
"operation_seq_num": 20,
"required_quantity": 1
},
{
"wip_entity_name": "JOB002",
"primary_item": "ITEM002",
"primary_name": "主产品2",
"primary_desc": "主产品描述2",
"start_quantity": 200,
"quantity_completed": 80,
"segment1": "COMP003",
"item_name": "组件3",
"item_desc": "组件3描述",
"operation_seq_num": 30,
"required_quantity": 5
}
]
*/
处理之后的数据
将同样的头规整到一起显示
{
"status": "success",
"message": "数据获取成功",
"data": [
{
"wip_entity_name": "JOB001",
"primary_item": "ITEM001",
"primary_name": "主产品1",
"primary_desc": "主产品描述1",
"start_quantity": 100,
"quantity_completed": 50,
"lines": [
{
"segment1": "COMP001",
"item_name": "组件1",
"item_desc": "组件1描述",
"operation_seq_num": 10,
"required_quantity": 2
},
{
"segment1": "COMP002",
"item_name": "组件2",
"item_desc": "组件2描述",
"operation_seq_num": 20,
"required_quantity": 1
}
]
},
{
"wip_entity_name": "JOB002",
"primary_item": "ITEM002",
"primary_name": "主产品2",
"primary_desc": "主产品描述2",
"start_quantity": 200,
"quantity_completed": 80,
"lines": [
{
"segment1": "COMP003",
"item_name": "组件3",
"item_desc": "组件3描述",
"operation_seq_num": 30,
"required_quantity": 5
}
]
}
]
}
代码
<?php
// 这里只写数据库部分-查出全部的数据头和行数据
$sql = "SELECT
a.wip_entity_name,
a.primary_item,
c.item_name AS primary_name,
c.item_desc AS primary_desc,
a.start_quantity,
a.quantity_completed,
d.segment1,
e.item_name,
e.item_desc,
d.operation_seq_num,
d.required_quantity
FROM
wip_jobs_all a
JOIN sf_item_no c ON a.primary_item = c.item_no
JOIN wip_material_requierments d ON a.wip_entity_name = d.wip_entity_name
JOIN sf_item_no e ON d.segment1 = e.item_no
WHERE 1=1";
// 执行查询
$result = mysqli_query($conn, $sql);
//数据库查询错误提示
if (!$result) {
// 查询失败处理
$response = [
'status' => 'error',
'message' => '查询失败: ' . mysqli_error($conn),
'data' => []
];
echo json_encode($response);
exit;
}
// 处理查询结果
//定义一个空数组
$groupedData = [];
while ($row = mysqli_fetch_assoc($result)) {
//以wip_entity_name作为唯一的键名
$wipEntity = $row['wip_entity_name'];
// 如果该工单尚未初始化,创建头部信息
if (!isset($groupedData[$wipEntity])) {
$groupedData[$wipEntity] = [
'wip_entity_name' => $row['wip_entity_name'],
'primary_item' => $row['primary_item'],
'primary_name' => $row['primary_name'],
'primary_desc' => $row['primary_desc'],
'start_quantity' => $row['start_quantity'],
'quantity_completed' => $row['quantity_completed'],
'lines' => []
];
}
// 添加行项目数据
$groupedData[$wipEntity]['lines'][] = [
'segment1' => $row['segment1'],
'item_name' => $row['item_name'],
'item_desc' => $row['item_desc'],
'operation_seq_num' => $row['operation_seq_num'],
'required_quantity' => $row['required_quantity']
];
}
// 释放结果集
mysqli_free_result($result);
// 将关联数组转换为索引数组(兼容所有PHP版本)
$finalData = array_values($groupedData);
// 构建响应
$response = [
'status' => 'success',
'message' => '数据获取成功',
'data' => $finalData
];
// 设置JSON头并输出响应
header('Content-Type: application/json; charset=utf-8');
echo json_encode($response, JSON_UNESCAPED_UNICODE);
// 关闭数据库连接
mysqli_close($conn);
?>