1

現在、3つのテーブルがあります。1つ目はユーザー用、2つ目はユーザーのグループ用、3つ目はポイント用です(その他のテーブルが必要な場合は、作成できます:P)。

テーブルユーザー: user_id | fname | active

テーブルuser_groups: id | group_id | user_id | active

テーブルuser_points: id | point_type | point_units | active

グループの各ユーザーは、さまざまなアクティビティでポイントを獲得できます。そこで、ユーザーがさまざまな活動で獲得したポイントを最後に総計で示したいと思います。

これが私がこれまでに持っているクエリです:

SELECT 
    u.user_id AS `ID`,  
    u.fname AS `Name`,  
    SUM(case when up.point_type = 'Referrals' then up.point_units else 0 end) AS `Referrals`, 
    SUM(case when up.point_type = 'Email' then up.point_units else 0 end) AS `Email`, 
    SUM(case when up.point_type = 'Facebook' then up.point_units else 0 end) AS `Facebook`, 
    SUM(case when up.point_type = 'Twitter' then up.point_units else 0 end) AS `Twitter`, 
    SUM(case when up.point_type = 'Extra' then up.point_units else 0 end) AS `Extra`, 
    SUM(case when up.point_type = 'Discount' then up.point_units else 0 end) AS `Discount`, 
    SUM(case when u.user_id = up.user_id then up.point_units else 0 end) AS `Total` 
FROM users AS u, user_groups AS uc, user_points AS up 
WHERE u.user_id = uc.user_id 
    AND u.user_id = up.user_id 
    AND u.active = 1 
    AND uc.active = 1 
    AND up.active = 1 
    AND uc.group_id = up.group_id 
    AND uc.group_id = 65 
ORDER BY u.fname; 

私が抱えている問題は、クエリに1人のユーザーと、各列のすべてのユーザーのポイントの合計のみが表示されることです。

これが正しいアプローチではないことは知っていますが、すべてをクエリに入れる方法がわかりません。また、このクエリをPHPExcelに提供しているので、わかりやすいレポートを生成できます。

何か案は?:-)

4

1 に答える 1

1

GROUP BY集計関数を使用する場合は句が必要です。あなたは次のように見えるかもしれません:

GROUP BY u.user_id

あなたのクエリでは、それはここに行きます:

AND uc.group_id = 65 
GROUP BY u.user_id
ORDER BY u.fname;
于 2012-05-30T16:12:59.487 に答える