現在、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に提供しているので、わかりやすいレポートを生成できます。
何か案は?:-)