Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.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
Mysql 多个左联接影响了我的求和(TIMESTAMPDIFF)计算_Mysql_Sql_Left Join - Fatal编程技术网

Mysql 多个左联接影响了我的求和(TIMESTAMPDIFF)计算

Mysql 多个左联接影响了我的求和(TIMESTAMPDIFF)计算,mysql,sql,left-join,Mysql,Sql,Left Join,我目前正在尝试创建一份报告,报告我的PHPBB3论坛上的一些个人上周总共登记的时间。最初,我有以下查询,如预期所示: 选择forum_users.username,SUM(TIMESTAMPDIFF(秒,schedule_slots.time_start,schedule_slots.time_finishing))作为秒 来自论坛用户 左联接明细表\u插槽 在论坛上\u users.user\u id=schedule\u slots.user\u id 并计划\u slots.time\u

我目前正在尝试创建一份报告,报告我的PHPBB3论坛上的一些个人上周总共登记的时间。最初,我有以下查询,如预期所示:

选择forum_users.username,SUM(TIMESTAMPDIFF(秒,schedule_slots.time_start,schedule_slots.time_finishing))作为秒
来自论坛用户
左联接明细表\u插槽
在论坛上\u users.user\u id=schedule\u slots.user\u id
并计划\u slots.time\u start>=(CURDATE()-间隔1周)
而明细表_slots.is _del=0
和明细表_slots.channel=0
其中(forum_users.group_id=8或forum_users.group_id=5或forum_users.group_id=14)
按论坛用户分组。用户名
按上级排序(论坛用户.用户名)
但是,当我加入另一个表时,时间戳差异最终被错误地计算(它更高),下面是我更新的非工作语句:

选择forum_users.username,SUM(TIMESTAMPDIFF(秒,schedule_slots.time_Start,schedule_slots.time_finishing))作为秒,group_concat(不同的forum_user_group.group_id)作为用户组
来自论坛用户
左联接明细表\u插槽
在论坛上\u users.user\u id=schedule\u slots.user\u id
并计划\u slots.time\u start>=(CURDATE()-间隔1周)
而明细表_slots.is _del=0
和明细表_slots.channel=0
左加入论坛用户组
在论坛用户组上。用户id=论坛用户。用户id
其中(forum_users.group_id=8或forum_users.group_id=5或forum_users.group_id=14或forum_users.group_id=12)
按论坛用户分组。用户名
按上级排序(论坛用户.用户名)

我对此一无所知,非常感谢您的帮助。

时间戳差异的计算是正确的,但您可以将其乘以用户所在的组数

我会尝试:

SELECT forum_users.username, SUM(TIMESTAMPDIFF(SECOND, schedule_slots.time_starting, schedule_slots.time_finishing)) AS seconds, 
(select group_concat(DISTINCT group_id) from forum_user_group WHERE forum_user_group.user_id = forum_users.user_id) AS user_groups 
FROM forum_users 
LEFT JOIN schedule_slots 
ON forum_users.user_id = schedule_slots.user_id 
AND schedule_slots.time_starting >= (CURDATE() - INTERVAL 1 WEEK) 
AND schedule_slots.is_del = 0 
AND schedule_slots.channel = 0 
WHERE (forum_users.group_id = 8 OR forum_users.group_id = 5 OR forum_users.group_id = 14 OR forum_users.group_id = 12) 
GROUP BY forum_users.username, user_groups 
ORDER BY upper(forum_users.username)