Teams
このシナリオには、との 3 つのテーブルが Players
ありPlayersInTeams
ます。
APlayer
は単なる登録ユーザーです。に関連付けられている W/L データはありませんPlayer
。
ATeam
は、勝敗の記録を維持します。プレイヤーが 1 人でプレイしている場合、そのプレイヤーは自分の「ソロ」チーム (Team
そのプレイヤーだけがいる) でプレイします。Bob と Jan が一緒に勝つたびに、彼らのTeam
エントリーは wins++ になります。ジェイソンとトミーが一緒に負けるたびに、彼らのチーム エントリーは負け++になります。
テーブルには 2 つの列しかなく、とPlayersInTeams
の間の交差テーブルです:Players
Teams
> desc PlayersInTeams ;
+------------+---------+
| Field | Type |
+------------+---------+
| fkPlayerId | int(11) |
| fkTeamId | int(11) |
+------------+---------+
したがって、ここが難しい部分です。
aPlayer
は複数の の一部になる可能性があるため、マッチの開始時にテーブルからTeams
権利をフェッチすることが重要です。TeamId
Teams
プレーヤーの SOLO チームは、
select fkTeamId from PlayersInTeams where
fkPlayerId=1 HAVING count(fkTeamId)=1;
いいえ、ちがいます!!しかし、私はその理由を理解していません。
私は言おうとしています:
fkPlayerId=1 のPlayersInTeams から fkTeamId を取得します
が、この特定の fkTeamId を持つ行の数は正確に 1 です。
クエリは (空のセット) を返し、実際に HAVING 句を正しくない ( HAVING count(fkTeamId)<>1;
) に変更すると、目的の行が返されます。