Php 从两个表对SQL中的列求和

Php 从两个表对SQL中的列求和,php,mysql,sql,sum,Php,Mysql,Sql,Sum,我正在使用MySQL,并试图计算用户参与活动的小时数,但仅限于特定组织 编辑:我有另一张桌子被扔进了混音(MiseEvents)。我认为分组发言造成了一些问题,但我不太确定该怎么办 table events: contains the "event" information. orgID is the ID of the organization hosting it -each listing is a separate event ID | orgID | hours 1 | 1

我正在使用MySQL,并试图计算用户参与活动的小时数,但仅限于特定组织

编辑:我有另一张桌子被扔进了混音(MiseEvents)。我认为分组发言造成了一些问题,但我不太确定该怎么办

table events: contains the "event" information. orgID is the ID of the organization hosting it
-each listing is a separate event

ID | orgID | hours
1  |   1   |   1
2  |   1   |   2
3  |   2   |   1

table eventUserInfo: shows which users attended the events
-refID references the ID column from the events table

ID | refID | userID
 1 |   1   |   1
 2 |   1   |   3
 3 |   2   |   2
 4 |   2   |   1 
 5 |   3   |   2

table miscEvents
-these are entered in manually if an event by an organization wasn't posted on the site, but
the users still wants to keep track of the hours

ID |  userID  | orgID |  Hours
1  |    1     |  1    |    2
因此,当我查看组织1的成员活动时,应显示下表

userid | total hours
  1    |      5      //participated in ID #1 and 2 and a misc event, total of 4 hours
  2    |      2      //participated in ID #2 only for org 1
  3    |      1      //participated only in ID #1
假设给定的输入是$orgID,在本例中设置为1

SELECT eventUserInfo.userID, sum(events.hours) as hours,sum(miscEvents.hours) AS mhours FROM events 
JOIN eventUserInfo ON events.ID = eventUserInfo.refID 
JOIN miscEvents ON events.orgID = miscEvents.orgID
WHERE events.orgID = '$orgID'
GROUP BY eventUserInfo.userID
我认为应该是:

SELECT eventInfo.userID               --- there is no "events.userID" column
     , SUM(events.hours) AS hours     --- alias added
FROM events 
  JOIN eventInfo                      --- no need for LEFT JOIN
    ON events.ID = eventInfo.refID    
WHERE events.orgID = '$orgID'
GROUP BY eventInfo.userID
问题可能在于您正试图打印
“hours”
,其中包含:
$event['hours']
,但没有返回
hours
列(仅
userID
SUM(event.hours)
。请在
选择
列表中使用别名,如上所述。

我认为应该是:

SELECT eventInfo.userID               --- there is no "events.userID" column
     , SUM(events.hours) AS hours     --- alias added
FROM events 
  JOIN eventInfo                      --- no need for LEFT JOIN
    ON events.ID = eventInfo.refID    
WHERE events.orgID = '$orgID'
GROUP BY eventInfo.userID

问题可能在于,您正试图打印带有以下内容的
“hours”
$event['hours']
,但没有返回
hours
列(仅
userID
SUM(event.hours)
。在
选择列表中使用别名,如上所述。

或者因为eventINFO似乎是查询中的主表:

SELECT eventINFO.userID, SUM(events.hours)
FROM eventINFO
JOIN events ON eventINFO.refID = events.ID
WHERE events.orgID = '$orgID'
GROUP BY eventINFO.userID

结果应该与ypercube相同,但在我看来,从调用中调用
中的主表更为清晰,或者因为eventINFO似乎是查询中的主表:

SELECT eventINFO.userID, SUM(events.hours)
FROM eventINFO
JOIN events ON eventINFO.refID = events.ID
WHERE events.orgID = '$orgID'
GROUP BY eventINFO.userID

应产生与ypercube相同的结果,但对我来说,从调用中调用
中的主表似乎更清楚一些。对于新问题,您需要解决以下问题:

sum(events.hours + miscEvents.hours)
如果我没弄错的话,一个
总和中不能有多个列
,每次调用只能添加一个列

我想尝试一下:

SUM(events.hours) AS hours, SUM(miscEvents.hours) AS mhours

然后,在您的函数中,将这些值相加到新问题中,您需要解决以下问题:

sum(events.hours + miscEvents.hours)
如果我没弄错的话,一个
总和中不能有多个列
,每次调用只能添加一个列

我想尝试一下:

SUM(events.hours) AS hours, SUM(miscEvents.hours) AS mhours


然后,在你的函数中,把这些值加在一起,
$total=hours+mhours

你有一个
连接
,但是我看不到你实际连接到
事件
表的其他表?难道
用户ID=1
不应该有3个小时吗?对你们两个都有。我的输入错误,我已经修复了。可能是另一个输入错误:
SELECT event.userID,
不应该是
events.userID
?@JT Smith修复。我试图复制/粘贴,但格式不正确,所以我键入了它。我为拼写错误道歉,我想我抓住了他们。你有一个
JOIN
在那里,但我没有看到你实际加入
events
表的其他表
userid=1
应该有3个小时吗?对你们两个来说都是。我的打字错误已经解决了。可能还有另一个错误:
SELECT event.userid,
不应该是
events.userid
?@JT Smith已经解决了。我试图复制/粘贴,但格式不正确,所以我把它打印出来了。我为打字错误道歉,我想我抓住了他们。我有一个妙招我想主要是别名阻止了我嘿,谢谢你昨天的帮助。这很有效,但我现在有另一张桌子。你能看一下吗?我有几个拼写错误,但我想我都做到了。我想主要是别名阻止了我嘿,谢谢你昨天的帮助。这很有效,但我现在有另一张桌子。你能看一下吗?谢谢你昨天的帮助,但我更新了我的帖子。我有另一张桌子,但我现在似乎想不出这个。谢谢你昨天的帮助,但我更新了我的帖子。我有另一张桌子桌子扔进去了,我现在似乎弄不明白这个问题。但是,公平地说,你不应该收回他接受的答案。我们都在这里提供帮助,希望得到代表的回报。你应该重新接受他的答案,然后发布另一个问题。如果你这样做,让我知道,我会在你的新问题上发布我的新答案。你说得对t JT。我想如果我再次发布,它将被删除,因为它本质上是同一个问题,还有一个条件。我知道你做了什么,JT,但是我认为问题在于分组声明。我可能有点离题,但这似乎给我带来了一些麻烦。我更新了我的代码,以反映你所做的事情。我没有看到任何错误现在开始查询……向我们展示使用此查询的函数Hower,公平地说,你不应该收回他接受的答案。我们都在这里提供帮助,希望得到代表的回报。你应该重新接受他的答案,然后发布另一个问题。如果你这样做,请让我知道,我将在你的新问题上发布我的新答案。哟你是对的,JT。我想如果我再次发布它,它会被删除,因为它本质上是同一个问题,还有一个条件。我知道你做了什么,JT,但是我认为问题在于分组声明。我可能有点离题,但这似乎给我带来了一些麻烦。我确实更新了我的代码,以反映你所做的事情。我什么也没看到正在检查查询是否有错误…向我们展示使用此查询的函数