MYSQL - 三重内连接和SUM

时间:2013-04-10 12:35:08

标签: mysql sum inner-join

这里是我的表格:
邀请

id | inviteFromID | inviteToID | timestamp | joined
---------------------------------------------------
1  | 1            | 234567890  | 2013-02-02| 1
2  | 1            | 345678901  | 2013-02-02| 1

球员:

id | FacebookID | first_name | last_name
---------------------------------------------------
1  | 123456789  | Dude       | Master
2  | 234567890  | Super      | Man
3  | 345678901  | Bat        | Man  

回合:

id | PlayerID | round | played | status
---------------------------------------------------
1  | 1        | 1      | 1     | 1
2  | 1        | 2      | 1     | 0
3  | 2        | 1      | 1     | 1

在这种情况下:
ID = 1的玩家将拥有1个自己的Point,ID = 2将拥有1个自己的Point 但ID 1邀请2,所以ID = 1总共有两点(下面的解释)。

关系:
- player.id = invites.inviteFromID
- player.id = rounds.playerID

说明
来自表“玩家”的用户可以邀请ppl进入游戏。比赛是轮次进行的 当用户玩游戏时,“rounds”表更新为“playing = 1”,userId和“status = 1(如果赢了)或status = 0(如果没有赢)”。

为每个用户获取积分不是问题。

问题:
问题是,每个受邀用户都会给邀请者他的积分。

因此,如果用户A(赢得2轮= 2分)邀请B,并且B打了3轮并且赢了3轮(= 3分),则用户A的总分为5(来自A的点数+来自B的点数) 。
对于邀请参加游戏的所有用户A都是如此,因此如果用户A邀请了B,C和D,他也会得到他们的积分。

在这里我卡住了。我试图内部加入播放器,邀请和回合,但它没有用,我现在卡住了。

最佳输出

PlayerID | ownPoints | otherPoints | totalPoints
---------------------------------------------------
1        | 1         | 1           | 2
2        | 1         | 0           | 1
是的,有人能帮帮我吗? :)

编辑:
功能 - getPointsFromPlayer(弃用:“点数”不再可用)

SELECT 
    p.points AS OwnPoints, count(p.id) AS UsersCount, SUM(pi.points) AS SumPoints 
FROM 
    player AS p 
INNER JOIN invites AS i ON p.id = i.inviteFromID 
INNER JOIN player AS pi ON i.inviteToId  = pi.facebookID
WHERE 
    p.id = :inviter AND i.joined = 1 
GROUP BY 
    p.id

1 个答案:

答案 0 :(得分:0)

解决了它,我想的更简单:

        SELECT 
            SUM(CASE WHEN r.status = 1 THEN 1 ELSE 0 END) AS won_rounds
            FROM invites i
            INNER JOIN rounds r ON  i.inviteToID = r.facebookID
            WHERE r.played = 1 AND i.joined = 1 AND i.inviteFromID = :facebookID  

尽管如此,谢谢大家!