0

私はMySQLを使用しており、ユーザーがイベントに参加した時間数を合計しようとしていますが、特定の組織についてのみです。

編集:私は別のテーブルをミックスに投入しました(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
4

3 に答える 3

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"with:を出力しようとしていることにありますが、返された列はありません(上記$event['hours']のように、リストでエイリアスを使用してください。hoursuserIDSUM(event.hours)SELECT

于 2012-04-16T23:50:45.260 に答える
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ます

于 2012-04-16T23:59:54.697 に答える
1

あなたの新しい問題に対して、あなたはこれを取り除く必要があります:

sum(events.hours + miscEvents.hours)

私が間違っていなければ、複数の列を含めることはできませんSUM。呼び出しごとに1つの列しか追加できません。

私は次のようなことを試みます:

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

次に、関数でこれらの値を合計します$total = hours + mhours

于 2012-04-18T03:25:38.187 に答える