本文详解如何修正 sql 查询逻辑,正确按月份和木材类型(如 a-001、a-003)汇总 `cubic` 体积数据,并在 html 表格中动态渲染结果。核心在于区分字段用途:用 `wood` 字段匹配类型,对 `cubic` 字段求和,而非错误地用 `cubic` 值做条件判断。
在开发木材加工或林业管理类系统时,常需将原始生产数据(如 furesz 表)按时间维度(月)与业务维度(木材种类)进行交叉汇总。你遇到的问题本质是 SQL 条件聚合逻辑错误:原代码中 SUM(IF(cubic='A-001',1,0)) 试图用 cubic 字段(存储体积数值,如 0.25)去匹配木材编码(如 'A-001'),这必然导致所有条件为假,返回全 0.0。
✅ 正确做法是:以 wood 字段作为分类依据,对 cubic 字段执行条件求和。以下是修正后的完整实现方案:
SELECT
MONTH(date) AS month,
COUNT(DISTINCT DATE(date)) AS work_days,
SUM(IF(wood = 'A-001', cubic, 0)) AS sum_nyar,
SUM(IF(wood = 'A-003', cubic, 0)) AS sum_tölgy,
SUM(IF(wood = 'A-004', cubic, 0)) AS sum_vtölgy,
SUM(IF(wood = 'A-018', cubic, 0)) AS sum_cser,
SUM(cubic) AS sum_full
FROM furesz
WHERE machine = 'mebor2'
GROUP BY month
ORDER BY month;? 说明:SUM(IF(wood='A-001', cubic, 0)) 表示——当 wood 值为 'A-001' 时,累加其对应的 cubic 数值;否则加 0。这样即可精准按木材类型分组求和。
| Hónap | Nyár | Tölgy | VTölgy | Cser | Összesen |
|---|---|---|---|---|---|
| Query failed: " . mysqli_error($conn) . " | |||||
| Nincs adat a kiválasztott gépre ('mebor2'). | |||||
| = $row['month'] ?> | = $format($row['sum_nyar']) ?> m³ | = $format($row['sum_tölgy']) ?> m³ | = $format($row['sum_vtölgy']) ?> m³ | = $format($row['sum_cser']) ?> m³ | = $format($row['sum_full']) ?> m³ |
通过本次修正,你将获得真正符合业务需求的动态汇总表——既体现每月各木材类型的精确产出,又保持总和一致性,为生产分析与决策提供可靠数据支撑。