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