如何整合MySQL与DB2查询数组,按sku_id统计生成报表/CSV?
嘿,我来帮你捋捋怎么搞定这个数组整合和报表生成的事儿!
分步解决数组整合与报表生成问题
第一步:明确数组关联逻辑
首先得把两个数组的关联关系抓准——既然核心是sku_id,那先确认产品数组里的sku_id和客户交易数组里的对应字段(大概率也是sku_id)是完全匹配的,比如:
产品数组结构示例:
$products = [ ['sku_id' => 'SKU001', 'product_name' => '无线耳机', 'category' => '数码'], ['sku_id' => 'SKU002', 'product_name' => '纯棉T恤', 'category' => '服饰'], ... ];
客户交易数组结构示例:
$customerTransactions = [ ['sku_id' => 'SKU001', 'customer_id' => 'C001', 'quantity' => 2, 'amount' => 399.98], ['sku_id' => 'SKU001', 'customer_id' => 'C002', 'quantity' => 1, 'amount' => 199.99], ['sku_id' => 'SKU002', 'customer_id' => 'C003', 'quantity' => 3, 'amount' => 299.97], ... ];
第二步:构建整合后的统计数组
接下来遍历产品数组,把每个sku_id对应的交易数据聚合起来,顺便算出总数量和总交易量:
PHP版本示例
$finalReportData = []; foreach ($products as $product) { $currentSku = $product['sku_id']; // 筛选当前sku的所有交易记录 $skuTransactions = array_filter($customerTransactions, function($trans) use ($currentSku) { return $trans['sku_id'] === $currentSku; }); // 统计核心指标 $totalQuantity = array_sum(array_column($skuTransactions, 'quantity')); $totalAmount = array_sum(array_column($skuTransactions, 'amount')); // 组装最终数据 $finalReportData[] = [ 'sku_id' => $currentSku, 'product_name' => $product['product_name'], 'category' => $product['category'], 'total_quantity' => $totalQuantity, 'total_amount' => $totalAmount, 'transaction_details' => $skuTransactions // 可选:保留交易明细 ]; }
Python版本示例
final_report_data = [] for product in products: current_sku = product['sku_id'] # 筛选当前sku的交易记录 sku_transactions = [t for t in customer_transactions if t['sku_id'] == current_sku] # 统计指标 total_quantity = sum(t['quantity'] for t in sku_transactions) total_amount = sum(t['amount'] for t in sku_transactions) # 组装数据 final_report_data.append({ 'sku_id': current_sku, 'product_name': product['product_name'], 'category': product['category'], 'total_quantity': total_quantity, 'total_amount': total_amount, 'transaction_details': sku_transactions })
第三步:生成CSV或报表文件
生成汇总CSV(PHP为例)
直接用内置函数快速生成汇总报表:
// 创建汇总CSV文件 $csvHandle = fopen('sku_summary_report.csv', 'w'); // 写入表头 fputcsv($csvHandle, ['SKU编号', '商品名称', '分类', '总购买数量', '总交易金额']); // 写入数据行 foreach ($finalReportData as $row) { fputcsv($csvHandle, [ $row['sku_id'], $row['product_name'], $row['category'], $row['total_quantity'], $row['total_amount'] ]); } fclose($csvHandle);
单个SKU独立生成CSV
如果需要每个sku单独输出报表,循环处理即可:
foreach ($finalReportData as $skuData) { $fileName = "sku_{$skuData['sku_id']}_detail_report.csv"; $csvHandle = fopen($fileName, 'w'); // 写入表头 fputcsv($csvHandle, ['SKU编号', '商品名称', '客户ID', '购买数量', '交易金额']); // 写入明细 foreach ($skuData['transaction_details'] as $trans) { fputcsv($csvHandle, [ $skuData['sku_id'], $skuData['product_name'], $trans['customer_id'], $trans['quantity'], $trans['amount'] ]); } // 追加统计行 fputcsv($csvHandle, ['', '', '总计', $skuData['total_quantity'], $skuData['total_amount']]); fclose($csvHandle); }
几个实用优化建议
- 如果数据量很大,别用数组筛选,建议直接在数据库层面做关联聚合:比如把DB2的数据同步到MySQL(或者反过来),用
JOIN+GROUP BY sku_id直接算出统计结果,性能会提升很多。 - 提前校验数据一致性:比如确保所有
sku_id都是字符串类型,避免数字和字符串混合导致匹配失败。 - 处理空交易场景:如果某个sku没有交易记录,要把统计值设为0,避免报表出现空值。
内容的提问来源于stack exchange,提问作者Geoff_S
相关产品推荐
相关产品推荐

