这里是我的表格:
邀请
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
答案 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
尽管如此,谢谢大家!