如何在 PHP 中动态生成按月和木材类型分组的 MySQL 汇总报表
技术百科
霞舞
发布时间:2025-12-31
浏览: 次 本文详解如何通过修正 sql 条件逻辑,正确按月份和木材型号(如 a-001、a-003)分别汇总立方米(cubic)数据,并在 html 表格中动态渲染结果。
在实际木材加工或仓储管理系统中,常需按月统计不同木材类型的出库/加工量(单位:m³)。你当前遇到的核心问题是:SQL 中误将 cubic 字段用于 IF() 的判断条件,而实际应根据 wood 字段匹配型号,再对 cubic 值求和。原始查询中 SUM(IF(cubic='A-001',1,0)) 本质是在计数(且逻辑错误),而非累加体积值——这导致所有分类列显示为 0.0 m³,仅 SUM(cubic) 正确。
✅ 正确做法是:使用 SUM(IF(wood = 'A-001', cubic, 0)) —— 即当 wood 字段匹配特定型号时,取其对应的 cubic 数值参与求和;否则计入 0。同时注意:
- MySQL 中小数分隔符为英文句点(.),但你的示例数据使用了逗号(,),请确保数据库中 cubic 列为 DECIMAL 或 FLOAT 类型,且数据已规范存储(如 0.25 而非 0,25),否则会导致隐式转换失败或求和异常;
- MONTH(date) 仅返回月份数字(1–12),若需显示“2月”等中文名称,可在 PHP 中映射处理;
- WHERE machine='mebor2' 与示例数据中的 mebor1 不一致,请根据实际需求调整过滤条件。
以下是修正后的完整 PHP + MySQL 实现代码(含健壮性增强):
| 月份 | Nyár | Tölgy | VTölgy | Cser | 合计 |
|---|---|---|---|---|---|
| 查询失败:" . mysqli_error($conn) . " | |||||
| 暂无数据 | |||||
| = htmlspecialchars($monthName) ?> | = number_format($row['sum_nyar'], 2, '.', '') ?> m³ | = number_format($row['sum_tolgy'], 2, '.', '') ?> m³ | = number_format($row['sum_vtolgy'], 2, '.', '') ?> m³ | = number_format($row['sum_cser'], 2, '.', '') ?> m³ | = number_format($row['sum_full'], 2, '.', '') ?> m³ |
? 关键改进说明:
- 使用 COALESCE(...,
0) 防止 NULL 值在前端显示为空白; - number_format($val, 2, '.', '') 统一使用英文小数点,避免 locale 导致格式混乱;
- 添加 htmlspecialchars() 防止 XSS(尤其当字段内容可能含用户输入时);
- 增加错误处理与空数据提示,提升生产环境鲁棒性;
- ORDER BY month ASC 确保月份升序排列,便于阅读。
? 进阶建议:
若木材类型较多或动态变化,可考虑用 CASE WHEN 或预聚合视图替代硬编码 IF;更灵活的方案是先查出所有唯一 wood 值,再动态构建列名与 SQL,结合 PDO 的预处理语句实现完全动态报表。
# 是在
# 可选
# 管理系统
# 英文
# 进阶
# 并在
# 按月
# 而非
# mac
# 隐式转换
# if
# html
# 编码
# 数据库
# NULL
# 排列
# lsp
# 前端
# php
# mysql
# sql
# Float
# xss
# pdo
# date
# 升序
# 暂无
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win10文件历史记录怎么用 Win10开启自动备
- php控制舵机角度怎么调_php发送pwm信号控制
- Win11怎样安装钉钉客户端_Win11安装钉钉教
- 如何用列表一次性对 DataFrame 的指定列应
- php错误怎么开启_display_errors与
- PHP主流架构怎么部署到Docker_容器化流程【
- Win11怎么设置环境变量_Win11配置Path
- Windows如何拦截2345弹窗广告_Windo
- Windows10怎么查看系统激活状态_Windo
- php485支持哪些操作系统_php485跨系统支
- 如何使用Golang开发基础文件下载功能_Gola
- 当网站SEO排名下降时,如何应对?
- MAC怎么用连续互通相机里的“桌上视角”_MAC在
- Windows服务无法启动错误1067是什么_进程
- 如何在Golang中实现微服务负载均衡_Golan
- 如何优化Golang Web性能_Golang H
- php485在php5.6下能用吗_php485旧
- 如何关闭Win10自动更新更新_Win10系统自动
- Win11怎样安装微信开发者工具_Win11安装开
- C#如何使用XPathNavigator高效查询X
- Win11怎么关闭专注助手 Win11关闭免打扰模
- Windows系统被恶意软件破坏后的恢复策略_错误
- 为什么Go需要go mod文件_Go go mod
- windows 10应用商店区域怎么改_windo
- 如何在Golang中处理通道发送接收错误_防止阻塞
- c++的mutex和lock_guard如何使用
- 如何在 Go 中正确测试带 Cookie 的 HT
- 如何在 ACF 中正确更新嵌套多层 Group 字
- Windows10怎么卸载预装软件_Windows
- Golang如何遍历目录文件_Golang fil
- Windows怎样关闭桌面弹窗广告_Windows
- Win11怎么更改鼠标指针方案_Windows11
- Win11声音太小怎么办_Windows 11开启
- Go 语言标准库为何不提供泛型 Contains
- 如何在Golang中捕获结构体方法错误_Golan
- XAMPP 启动失败(Apache 突然停止)的终
- 如何使用Golang进行HTTP服务性能测试_测量
- 使用类变量定义字符串常量时如何实现类型安全的 Li
- 如何有效拦截拼接式恶意域名的垃圾信息
- c++中的CRTP是什么 c++奇异递归模板模式【
- VSC怎样在VSC中调试PHPAPI_接口调试技巧
- Windows10如何查看保存的WiFi密码_Wi
- c++的static关键字有什么用 静态变量和静态
- Win11怎么关闭自动调节亮度_Windows11
- php怎么下载安装后测试是否成功_简单脚本验证方法
- 如何使用Golang编写单元测试_创建Test函数
- Win10系统字体模糊怎么办_Windows10高
- Win11怎么开启远程桌面连接_Windows11
- LINUX怎么设置系统语言_LINUX修改中文环境
- Mac自带的词典App怎么用_Mac添加和使用多语

0) 防止 NULL 值在前端显示为空白;
QQ客服