本文讲解如何通过单条sql join查询整合来自多个mysql表的月度统计数据,并在php中生成结构正确的html表格,避免因分步查询导致的行错位问题。
在PHP中将MySQL查询结果渲染为HTML表格时,若对不同数据源(如 be 表与 brikett_order 表)分别执行独立查询并逐行输出
根本原因在于:您使用了两个分离的查询 + 分离的循环,却试图将它们拼接进同一个
✅ 正确解法:用一条 SQL 完成关联聚合
利用 LEFT JOIN 将 be 表作为主表(确保所有生产月份都存在),关联 brikett_order 表中状态为 'zárt' 的有效订单,并按月份分组汇总:
SELECT MONTH(be.date) AS month, COUNT(DISTINCT DATE(be.date)) AS work_days, COUNT(*) AS sum_number, COALESCE(SUM(bo.amount), 0) AS sum_order FROM be LEFT JOIN brikett_order bo ON bo.barcode = be.barcode AND bo.state = 'zárt' AND YEAR(bo.date) = YEAR(be.date) AND MONTH(bo.date) = MONTH(be.date) WHERE be.barcode = 'R-001' GROUP BY month ORDER BY month;
? 关键优化说明:
对应 PHP 渲染代码(简洁、健壮、结构清晰):
Havi Gyártás
| Hónap | Munkanapok | Gyártás | Eladás |
|---|---|---|---|
| {$row['month']} | {$row['work_days']} | {$row['sum_number']} db | {$row['sum_order']} db |
| Nincs adat megjeleníthető. | |||
⚠️ 注意事项:
通过单查询聚合替代多查询拼接,不仅修复了表格结构问题,还提升
了代码可维护性与数据库执行效率——这是构建可靠数据报表的关键实践。