Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取每个用户特定时间段的事件持续时间_Php_Mysql_Wordpress - Fatal编程技术网

Php 获取每个用户特定时间段的事件持续时间

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\u id,我在多行上有多个条目。这是post的元数据

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值的方法。看见