私は7つの脇見のフットボールゲームのチームと得点を記録するデータベースを持っています。 チームは毎週変更されますが、勝利チームに参加するたびに、3ポイント(損失の場合は抽選0の場合は1)が割り当てられます。複数のデータ行を使用して比較選択を行うためのビューを作成する
ID 21のプレーヤーを選んで、彼がプレイしたゲームのリストを作成し、その後、他のプレーヤーと一緒にプレイしたポイントとゲームの合計数を与えることができます。
私は過去数時間にわたってこれを評価するためのクエリを作成していますが、それを解読することはできません。私のプロセスは次のとおりです。ゲームにそのプレイヤー21を果たしてきたすべてのプレイヤーIDの
1)リストプレーヤー21は
2で再生しているすべてのゲーム)のリストがで果たしてきました
3。 )プレイヤー21がプレイしたゲームのいずれかに登場したときに、上にリストされている各プレーヤーIDについて、リストされたプレーヤーIDの合計ポイントを合計し、出現回数をカウントします。
プレーヤー21は
mysql> SELECT Game, GameDate, Team, PlayerID FROM Teams WHERE PlayerID='21';
+------+------------+------+----------+
| Game | GameDate | Team | PlayerID |
+------+------------+------+----------+
| A | 2017-01-10 | A | 21 |
| A | 2017-01-17 | A | 21 |
| A | 2017-01-24 | A | 21 |
| B | 2017-01-10 | A | 21 |
| B | 2017-01-17 | A | 21 |
| B | 2017-01-24 | A | 21 |
| C | 2017-01-10 | A | 21 |
| C | 2017-01-17 | A | 21 |
+------+------------+------+----------+
8 rows in set (0.00 sec)
2)リストで再生している1)リストのすべてのゲームのすべてのプレイヤーIDのそのプレイヤー21がで果たした試合に出場していること。
LIMIT 1 OFFSET 0
を指定してこのクエリを実行しようとすると、エラーmore than one row selected
が発生します。
mysql>
SELECT PlayerID, Game, GameDate, Team
FROM Teams
WHERE Game=(SELECT Game FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 0)
AND GameDate=(SELECT GameDate FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 0)
AND Team=(SELECT Team FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 0);
+----------+------+------------+------+
| PlayerID | Game | GameDate | Team |
+----------+------+------------+------+
| 5 | A | 2017-01-10 | A |
| 8 | A | 2017-01-10 | A |
| 11 | A | 2017-01-10 | A |
| 12 | A | 2017-01-10 | A |
| 14 | A | 2017-01-10 | A |
| 15 | A | 2017-01-10 | A |
| 21 | A | 2017-01-10 | A |
+----------+------+------------+------+
7 rows in set (0.00 sec)
これは、プレイヤー21
で、最初のゲーム/行に果たしてきたすべてのプレイヤーが一覧表示されますが、私はすべてを得ることができるように、私はOFFSET @X
をインクリメントするには、このクエリを置くことができるloop
のいくつかのフォームがありますこれらのゲームとプレイヤーIDは1つの表に記載されていますか?
これは私がしようとしたものです:
SET @GameNumber = (SELECT Count(*) FROM Teams WHERE PlayerID='21');
SET @GameCount = 0;
SELECT PlayerID, Game, GameDate, Team
FROM Teams
WHILE(@GameNumber < @GameCount) DO
WHERE Game=(SELECT Game FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET @GameNumber)
AND GameDate=(SELECT GameDate FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET @GameNumber)
AND Team=(SELECT Team FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET @GameNumber);
SET @GameNumber = @GameNumer+1;
END WHILE;
EDIT 1
を私は他のプレイヤーがで果たしていることができ、少なくともどのように多くのゲームポイントにそれを持っていますプレーヤー21.
SELECT Players.PlayerID, COUNT(*) AS Games
FROM Teams, Players
WHERE
Teams.PlayerID=Players.PlayerID
AND
(
(
Game=(SELECT Game FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 0)
AND GameDate=(SELECT GameDate FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 0)
AND Team=(SELECT Team FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 0)
)
or
(
Game=(SELECT Game FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 1)
AND GameDate=(SELECT GameDate FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 1)
AND Team=(SELECT Team FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 1)
)
or
(
Game=(SELECT Game FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 2)
AND GameDate=(SELECT GameDate FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 2)
AND Team=(SELECT Team FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 2)
)
or
(
Game=(SELECT Game FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 3)
AND GameDate=(SELECT GameDate FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 3)
AND Team=(SELECT Team FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 3)
)
or
(
Game=(SELECT Game FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 4)
AND GameDate=(SELECT GameDate FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 4)
AND Team=(SELECT Team FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 4)
)
or
(
Game=(SELECT Game FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 5)
AND GameDate=(SELECT GameDate FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 5)
AND Team=(SELECT Team FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 5)
)
or
(
Game=(SELECT Game FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 6)
AND GameDate=(SELECT GameDate FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 6)
AND Team=(SELECT Team FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 6)
)
or
(
Game=(SELECT Game FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 7)
AND GameDate=(SELECT GameDate FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 7)
AND Team=(SELECT Team FROM Teams WHERE PlayerID='21' LIMIT 1 OFFSET 7)
)
)
GROUP BY Teams.PlayerID
ORDER BY Games DESC
;
上記の表には、
+----------+-------+
| PlayerID | Games |
+----------+-------+
| 15 | 8 |
| 21 | 8 |
| 8 | 8 |
| 14 | 6 |
| 5 | 6 |
| 19 | 5 |
| 11 | 5 |
| 10 | 3 |
| 12 | 3 |
| 4 | 2 |
+----------+-------+
10 rows in set (0.01 sec)