php - 如何操作和整理关联数组中的数据
问题描述
我有以下数据数组
2889 1 1062
2889 8 John Smith
2889 6 0.29
2891 1 1117
2891 8 Jamie Dean
2891 6 2
2892 1 1062
2892 8 John Smith
2892 6 4
第一列是与来自网站的表单条目相关的条目 ID 列表,第二列是与表单中的字段相关的元键列表,最后一列是来自这些字段的数据。
我需要做的是整理数组中的数据,以便我拥有的每个人:
ID Number(Meta_key 1)
Name(Meta_key 8)
Sum(Hours Owed(Meta_key 6))
我什至不知道如何开始这项任务,非常感谢任何帮助。
这些数据都已通过以下查询从数据库中提取:
select
entry_id,
meta_key,
meta_value
from
staff_gf_entry_meta
where
form_id = 48
and
entry_id in (
select
entry_id
from
staff_gf_entry_meta
where
meta_key = 7
and
form_id = 48
and
meta_value <= '2018-12-18'
and
meta_value >= '2018-12-12'
)
and (
meta_key = 1
or
meta_key = 8
or
meta_key = 6)
如果需要,可以更改查询。
解决方案
您可能需要一个带有聚合函数的GROUP BY
语句。SUM
要连续获取所有键/值对,您需要进行JOIN
多次查询。
SELECT
`mk1`.`meta_value` `Number`,
`mk8`.`meta_value` `Name`,
SUM(`mk6`.`meta_value`) `Hours Owed`
FROM
`staff_gf_entry_meta` `mk1`
INNER JOIN
`staff_gf_entry_meta` `mk6`
USING
(`entry_id`, `form_id`)
INNER JOIN
`staff_gf_entry_meta` `mk7`
USING
(`entry_id`, `form_id`)
INNER JOIN
`staff_gf_entry_meta` `mk8`
USING
(`entry_id`, `form_id`)
WHERE
`mk1`.`meta_key` = 1
AND
`mk6`.`meta_key` = 6
AND
`mk7`.`meta_key` = 7
AND
`mk8`.`meta_key` = 8
AND
`mk1`.`form_id` = 48
AND
`mk7`.`meta_value` BETWEEN '2018-12-12' AND '2018-12-18'
GROUP BY `mk1`.`meta_value`,`mk1`.`form_id`
;
我假设以下表结构和数据:
CREATE TABLE `staff_gf_entry_meta`
(
`form_id` int(11) NOT NULL,
`entry_id` int(11) NOT NULL,
`meta_key` int(11) NOT NULL,
`meta_value` varchar(45) DEFAULT NULL,
PRIMARY KEY (`entry_id`,`form_id`,`meta_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
;
INSERT INTO `staff_gf_entry_meta` (form_id, entry_id, meta_key, meta_value)
VALUES
(48, 2889, 1, 1062),
(48, 2889, 8, 'John Smith'),
(48, 2889, 6, 0.29),
(48, 2891, 1, 1117),
(48, 2891, 8, 'Jamie Dean'),
(48, 2891, 6, 2),
(48, 2892, 1, 1062),
(48, 2892, 8, 'John Smith'),
(48, 2892, 6, 4)
;
INSERT INTO `staff_gf_entry_meta`
SELECT DISTINCT form_id, entry_id, 7 meta_key, '2018-12-17' meta_value
FROM testdb.staff_gf_entry_meta
;
结果:
# Number, Name, Hours Owed
'1062', 'John Smith', '4.29'
'1117', 'Jamie Dean', '2'
推荐阅读
- r - 从特定列创建 varSelectInput
- winapi - 无法在win32的属性页中更改状态栏控件的高度
- php - 在 ajax 上使用 jasny/sso 时获取正确的服务器会话 id 的问题
- share-button - 在 Facebook Workplace 上共享带有自定义消息的网站
- java - 合并共享单词链接的行
- android-studio - 与我添加到购物车的项目一样多,它多次显示总价布局
- ios - 可以通过 WKWebView 中的用户脚本修改 XHR 请求吗?
- python-3.x - 为什么 One2many 字段的默认行没有在 Odoo 13 中自动填写相关值和默认值?
- reactjs - 反应导航依赖问题
- wpf - 如何在 UWP 中为举行活动设置自定义持续时间?