私はいくつかのテーブルを持っています:
table user:
id firstname lastname
1 John Doe
2 Jane Skith
3 will Smith
...
table member:
member_id member_user_id member_status member_activated_by
10 1 yes partner 1
11 1 yes partner 2
12 1 yes partner 3
13 2 yes partner 2
14 3 no ----
...
table points:
points_id points_user_id points_value points_date
10 1 10 2012-02-15
11 2 15 2012-02-15
12 2 20 2012-02-15
13 1 5 2012-02-15
14 3 30 2012-02-15
15 1 12 2012-02-15
...
So results SHOULD be:
id1 - John Doe: 27 Points
id2 - Jane Skith: 35 Points
id3 - will Smith: nothing (not activated)
問題は、id1 が 81 ポイントをもたらすことです (彼は 3 回アクティベートされているため...)
これは私の現在のmysql文字列です(短縮...)
SELECT points_user_id, SUM( points_value ) AS points_total, id, firstname, lastname
FROM user
JOIN member ON member.member_user_id = user.id
JOIN points ON points.points_user_id = user.id
WHERE 1
AND member_status = 'yes'
GROUP BY points_user_id
ORDER BY points_total DESC
LIMIT 0 , 100
..これまでのところ、「ほぼ」希望どおりに機能しています。
BUT: ユーザーには、「アクティベーション」テーブルに彼をアクティベートする複数のパートナーがいる場合があります。
これが呼び出されると、points_total の重複が得られます (uesr がパートナーによってアクティブ化された回数だけカウントされます...) これはランクリング リストではあまり意味がありません...
各 user_id に対して「1 つの」points_total のみを取得するにはどうすればよいですか
私が達成したいことを理解していただければ幸いです...どうもありがとう!