ここに私のテーブル:
招待
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 つのポイントを持ちます。
しかしID1が2を誘ったので、ID=1は合計で2点(後述)。
関係:
- player.id = invokes.inviteFromID
- player.id = rounds.playerID
説明:
テーブル "player" のユーザーは、人々をゲームに招待できます。ゲームはラウンドで行われます。
ユーザーがゲームをプレイすると、「プレイ済み = 1」と userId および「ステータス = 1 (勝った場合) またはステータス = 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