2012-04-16 2 views
0

Я использую MySQL и пытаюсь суммировать количество часов, в течение которых пользователь участвовал в событиях, но только для определенной организации.суммирование столбца в SQL из двух таблиц

EDIT: У меня есть другая таблица, брошенная в микс (misEvents). Я думаю, что оператор GROUP BY вызывает некоторые проблемы, но я не совсем уверен, что с этим делать.

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 
+1

У вас есть 'JOIN' там, но я не вижу никакой дополнительной таблицы, что вы на самом деле соединяющую с таблицей 'events'? –

+2

Не должно быть 'userid = 1' иметь 3 часа? –

+0

Да вам обоим. Опечатки с моей стороны, я исправил их. – user1104854

ответ

2

Я думаю, что это должно быть:

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, как указано выше.

+0

У меня была пара опечаток, но я думаю, что у меня есть все. – user1104854

+0

он прав о таблице 'userID' для событий. –

+0

Хороший улов ypercube –

2

Или так 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, но мне кажется немного более ясно, называя свою основную таблицу в FROM вызове

+0

Спасибо за помощь вчера, но я обновил свой пост. У меня есть другая таблица, и я не могу сейчас это понять. – user1104854

1

для вашей новой проблемы, вам нужно избавиться от этого:

sum(events.hours + miscEvents.hours) 

Если я не ошибаюсь, вы не можете иметь несколько столбцов в SUM вы с добавьте только один столбец за вызов.

Я хотел бы попробовать что-то вроде:

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

Тогда, в функции, сложите эти значения $total = hours + mhours

+0

Однако, чтобы быть справедливым к ypercube, вы не должны отказываться от принятого им ответа. Мы все здесь, чтобы помочь, в надежде получить репутацию взамен. Вы должны снова принять его ответ, а затем задать другой вопрос. Если вы сделаете это, дайте мне знать, и я отправлю свой новый ответ на ваш новый вопрос. –

+0

Вы правы JT. Я решил, что если я опубликую снова, он будет удален, потому что это по сути тот же вопрос с еще одним условием. Я вижу, что вы делали JT, однако я думаю, что проблема связана с выражением GROUP BY. Я мог бы уйти, но похоже, что это вызывает у меня проблемы. Я обновил свой код, чтобы отразить то, что вы сделали – user1104854

+0

Я не вижу ничего плохого в запросе сейчас ... Покажите нам функцию, которая использует этот запрос –

Смежные вопросы