php - 如何从列中提取数据并插入数组并添加值
问题描述
数据库:
ID | CID | HOURS
1 | 201 | 8, 8, 8, 8
2 | 201 | 2, 4, 7, 5
3 | 201 | 4, 3, 7, 1
如何提取 HOURS 列中的值并添加值以在 HTML 表上生成结果:
TOTAL HOURS: 14 | 15 | 22 | 14
我假设需要将 Hours 列中的值插入到数组中?所以,我做了一个while循环并分解结果并得到以下结果:
while($row = sqlsrv_fetch_object($result)) {
$hours = explode(', ', $hours)
}
我做了一个 print_r($hours, 1) 并得到以下信息:
Array
(
[0] => 8
[1] => 8
[2] => 8
[3] => 8
Array
(
[0] => 2
[1] => 4
[2] => 7
[3] => 5
)
Array
(
[0] => 4
[1] => 3
[2] => 7
[3] => 1
)
我如何循环这个来做计算?
解决方案
撇开逗号分隔的数据作为反模式不谈,可以在单个查询中返回聚合值,而无需通过 using 循环任何内容string_split
,其基础是:
select
Sum(case col when 1 then v end),
Sum(case col when 2 then v end),
Sum(case col when 3 then v end),
Sum(case col when 4 then v end)
from (
select v, row_number() over(partition by id order by id) col
from t
cross apply(
select Cast(value as int)v from String_Split(t.hours,',')
)v
)v
推荐阅读
- r - 从 xtabs 数据框在 R 中创建面积图
- python - 子集数据集时的Python语法错误?
- prometheus - 使用录制规则时的 Prometheus 过滤
- python - 日期问题 - 字符串索引必须是整数
- kubernetes - 网站在 GKE - Kubernetes 上响应“默认后端 - 404”
- sqlite - Flutter Sqlite,从数据库表中选择一个结果
- c - 选择排序未正确排序
- azure-devops - 用于 azure devops 管道构建中 API 测试的本地 SqlServer 数据库连接
- c# - 切换/加载场景时如何使用单例?
- powershell - 使用 Powershell 获取 *.lrc 以匹配它们的 *.flac 名称