这是我的表的一个例子。对于给定的drop
,我在多行上有多个条目(这是帖子的元数据)。
post_id
我想要完成的任务:
我希望从数据库中获取这些结果,以创建一个表格,显示每月为每个用户(post_id | meta_key | meta_value
________ ________________ ____________________
| |
1 | _theDate | 2016-03-31 12:03:59
1 | _email | the@email.com
1 | _EventDuration | 32400
2 | _theDate | 2016-01-06 14:50:22
2 | _email | the@email.com
2 | _EventDuration | 32400
3 | _theDate | 2017-02-14 15:32:52
3 | _email | other@user.net
3 | _EventDuration | 32400
4 | _theDate | 2016-10-01 22:45:55
4 | _email | the@email.com
4 | _EventDuration | 32400
5 | _theDate | 2016-09-25 11:01:39
5 | _email | other@user.net
5 | _EventDuration | 32400
6 | _theDate | 2015-11-19 19:08:45
6 | _email | other@user.net
6 | _EventDuration | 32400
)工作的小时数(_EventDuration
)(使用_email
例如,_theDate
)表示每个事件(2015-11
)。我可以在我的最后使用PHP变量来做到这一点。
因此,我可以通过以下方式制作HTML表格以显示此信息(我不正在寻找此部分的答案,例如将秒数转换为小时,这纯粹就是这样你知道我想要用表格中的所有数据完成什么:
post_id
我目前所拥有的只是这个请求,用于计算用户在2017年完成的事件数量,例如:
Hours the@email.com worked in 2015-11
Date Hours
2015-11-01 9
2015-11-13 7
2015-11-27 5
2015-11-30 8
Hours the@email.com worked in 2015-12
Date Hours
2015-12-01 10
2015-12-13 7
2015-12-27 3
2015-12-30 6
答案 0 :(得分:2)
您可以使用子查询来旋转表格,以便将电子邮件,日期和小时数分配到每个帖子的不同列中。然后,您可以使用常规分组查询来获取每日总数和用户数。
SELECT Email, Date, SUM(Hours) AS Hours
FROM (
SELECT MAX(IF(meta_key = '_email', meta_value, NULL)) AS Email,
MAX(IF(meta_key = '_theDate', DATE(meta_value), NULL)) AS Date,
SUM(IF(meta_key = '_EventDuration', meta_value, 0))/3600 AS Hours
FROM metatable
GROUP BY post_id
) AS x
GROUP BY Email, Date
ORDER BY Email, Date