Php 获取每个用户特定时间段的事件持续时间
这是我桌子的一个例子。对于给定的post\u id,我在多行上有多个条目。这是post的元数据Php 获取每个用户特定时间段的事件持续时间,php,mysql,wordpress,Php,Mysql,Wordpress,这是我桌子的一个例子。对于给定的post\u id,我在多行上有多个条目。这是post的元数据 post_id | meta_key | meta_value ________ ________________ ____________________ | | 1 | _theDate | 2016-03-31 12:03:59 1 | _email | the@email.com 1
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
我正在努力实现的目标:
我想从数据库中获取这些结果,制作一个表格,显示每个用户每月工作的小时数、事件持续时间、电子邮件,使用日期,例如,每个事件发布id的日期为2015-11。我可以使用PHP变量来实现这一点
因此,我可以用下面的方式制作HTML表格来显示这些信息我不想为这部分寻找答案,比如将秒转换为小时,这只是为了让您知道我想用表格中的所有数据完成什么:
目前我所能做的就是计算用户在2017年所做事件的数量,例如:
SELECT COUNT(*)
FROM
( SELECT post_id
FROM metatable
WHERE (meta_key = '_email' AND meta_value LIKE '%$user_email%')
OR (meta_key = '_theDate' AND LEFT(meta_value, 4) LIKE '%2017%')
GROUP
BY post_id
HAVING COUNT(DISTINCT meta_key) = 2
) p
您可以使用子查询来透视该表,以便将电子邮件、日期和小时数放入每篇文章的不同列中。然后,您可以使用普通分组查询来获取每天和用户的总数
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
您可以使用子查询来透视该表,以便将电子邮件、日期和小时数放入每篇文章的不同列中。然后,您可以使用普通分组查询来获取每天和用户的总数
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
您尝试过什么吗?是的,我有这个请求来计算用户在2017年所做的事件数,例如:从metatable中选择post\u id中选择count*,其中meta\u key=“\u email”和meta\u值,如“%$user\u email%”或meta\u key=“\u theDate”和LEFTmeta\u值,4类似于“%2017%”按帖子id分组的COUNTDISTINCT meta_key=2 p问题中的代码,注释是不可读的。您可以编辑帖子并写下此查询和一件事吗?为什么查询的最后一个有这个p?为什么不为meta key创建单独的列?您尝试过什么吗?是的,我请求计算用户在2017年完成的事件数,例如:从元表中选择post_id选择count*,其中meta_键=“_email”和meta_值,如“%$user_email%”或meta_键=“_theDate”和LEFTmeta_值,按post_id分组选择count*,其中COUNTDISTINCT meta_键=2,输出问题中的代码,评论不可读。你能编辑你的帖子并写下这个查询吗?还有一件事,为什么在最后一个查询中有这个p?为什么不为元键创建单独的列?对不起,有人重命名了我的问题,这不是我想要找到的。我想获得每个用户:每个事件的日期和_EventDuration值,我可以在几小时后将其转换为。这看起来是一个很好的开始。这样我就可以使用PHP获得结果,并在数组中搜索用户的电子邮件地址,然后找到相关信息?如果我错了,请纠正我。我是个新手!备注:这是在WordPress上,您可以使用IFmeta_key='\u email'和meta_value='the@email.com,meta_value,NULL`匹配特定电子邮件,而不是全部返回。这只是一种忽略不符合IF条件的行中所有NULL值的方法。对不起,有人重命名了我的问题,这不是我想找到的。我想获得每个用户:每个事件的日期和_EventDuration值,我可以在几小时后将其转换为。这看起来是一个很好的开始。这样我就可以使用PHP获得结果,并在数组中搜索用户的电子邮件地址,然后找到相关信息?如果我错了,请纠正我。我是个新手!备注:这是在WordPress上,您可以使用IFmeta_key='\u email'和meta_value='the@email.com,meta_value,NULL`匹配特定电子邮件,而不是全部返回。这只是一种忽略不符合IF条件的行中所有NULL值的方法。看见