いくつかの簡単なコンピューターゲームの結果を表示し、コード内で結果を1行ずつ簡単に反復できるようにしようとしています。各ゲームに関連するすべてのデータが各レコードに含まれるようにして、すべてを1行で出力できるようにします。例:
- チームA(スコア45)対チームB(スコア55)、ゲーム時間:5分
- チームC(スコア60)対チームD(スコア65)、ゲーム時間:4.3分
したがって、ゲームの場合、互いにプレイする2つのチームがあり、ゲームの終了時にそれぞれがスコアを取得します。基本的に、ゲームごとにgames_teamsテーブルに2つの行があります。
これが私のスキーマです:
これが私のテーブルデータです:
結果を簡単に繰り返してページに出力できるように、私が達成しようとしている出力は次のとおりです。
私はいくつかの恐ろしいSQLと次のような多くのサブクエリでそれを達成することができました:
SELECT games.game_id, game_name, game_duration,
(SELECT team_id FROM games_teams WHERE games.game_id = games_teams.game_id LIMIT 0, 1) AS team_id_a,
(SELECT team_id FROM games_teams WHERE games.game_id = games_teams.game_id LIMIT 1, 1) AS team_id_b,
(SELECT teams.team_name FROM games_teams INNER JOIN teams ON games_teams.team_id = teams.team_id WHERE games.game_id = game_id LIMIT 0, 1) AS team_name_a,
(SELECT teams.team_name FROM games_teams INNER JOIN teams ON games_teams.team_id = teams.team_id WHERE games.game_id = game_id LIMIT 1, 1) AS team_name_b,
(SELECT team_score FROM games_teams WHERE games.game_id = games_teams.game_id LIMIT 0, 1) AS team_score_a,
(SELECT team_score FROM games_teams WHERE games.game_id = games_teams.game_id LIMIT 1, 1) AS team_score_b
FROM games
その方法の問題は、速度が遅く、スケーリングしないことです。また、games_teamsテーブルから他のゲーム統計を引き出して、さらに多くのサブクエリを作成する必要があります。
私が試した他の方法は次のとおりです。
私は次のSQLでそれを達成しました:
SELECT games.game_id, game_name, game_duration, teams.team_id, team_name, team_score
FROM games
INNER JOIN games_teams ON games.game_id = games_teams.game_id
INNER JOIN teams ON games_teams.team_id = teams.team_id
各ゲームに関連するデータが2つの異なるレコードにあるため、この方法でコードを進めるのは難しくなります。行の最初の部分を作成してから、次のループの反復に進み、次の部分を印刷する必要があります。次に、次のゲームのために最初からやり直します。次のように、すべての情報を1行に表示しようとしています。
チームA(スコア45)対チームB(スコア55)、ゲーム時間:5分
だから、すべてが1つのレコードにある方が簡単だと思います。これをうまく達成する方法はありますか?games_teamsテーブルにさらに列が必要な場合もスケーリングしますか?
再作成する必要がある場合は、データベースコードへのペーストビンリンクを次に示します。
どんな助けでも大歓迎です、ありがとう!