这是我的桌子:
邀请
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 个自己的积分,而 ID = 2 的玩家将拥有 1 个自己的积分。
但是 ID 1 邀请了 2 所以 ID = 1 总共有两点(解释如下)。
关系:
-player.id=
invites.inviteFromID-player.id=rounds.playerID
描述:
“玩家”表中的用户可以邀请用户加入游戏。比赛以轮次进行。
当用户玩游戏时,“回合”表会更新为“played = 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