1

ここに私のテーブル:
招待

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
4

1 に答える 1

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  

それでも、皆さんありがとう!

于 2013-04-10T22:01:53.207 に答える