So verknüpfen Sie mehrere Tabellen, einschließlich Nachschlagetabellen, und geben Daten in Zeilen zurück

Ich versuche, einige einfache Computerspielergebnisse anzuzeigen und es einfach zu machen, die Ergebnisse zeilenweise in meinem Code durchzugehen. Ich möchte, dass alle relevanten Daten für jedes Spiel in jedem Datensatz enthalten sind, damit ich sie in einer Zeile ausgeben kann, z.

Team A (Ergebnis45) vs.Team B (Ergebnis55), Spieldauer:5 MinutenTeam C (Ergebnis60) vs.Team D (Ergebnis65), Spieldauer:4.3 Minuten

Für ein Spiel gibt es also zwei Teams, die gegeneinander antreten und am Ende des Spiels jeweils eine Punktzahl erzielen. Grundsätzlich befinden sich in der games_teams-Tabelle für jedes Spiel zwei Zeilen.

Hier ist mein Schema:

Hier sind meine Tabellendaten:

Hier ist die Ausgabe, die ich erreichen möchte, damit ich die Ergebnisse leicht durchlaufen und auf der Seite ausgeben kann:

Ich habe es mit ein paar schrecklichen SQL-Anweisungen und vielen Unterabfragen geschafft:

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

Das Problem bei dieser Methode ist, dass sie langsam ist und nicht skaliert. Ich muss auch andere Spielstatistiken aus der games_teams-Tabelle ziehen, damit es noch mehr Unterabfragen gibt.

Die andere Methode, die ich ausprobiert habe, war:

Das habe ich mit folgendem SQL erreicht:

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

Jetzt ist es schwieriger, diesen Weg im Code zu finden, da sich die relevanten Daten für jedes Spiel in zwei verschiedenen Datensätzen befinden. Ich müsste den ersten Teil der Zeile erstellen, dann in die nächste Schleifeniteration gehen und den nächsten Teil drucken. Dann starte es für das nächste Spiel noch einmal von vorne. Ich versuche, alle Informationen in einer Zeile anzuzeigen:

Team A (Punktzahl 45) vs Team B (Punktzahl 55), Spieldauer: 5 Minuten

Deshalb denke ich, wäre es einfacher, wenn alles auf einer Platte wäre. Gibt es eine Möglichkeit, dies zu erreichen, und so skaliert es auch, wenn ich mehr Spalten in der games_teams-Tabelle benötige?

Hier ist ein Pastebin-Link mit dem Datenbankcode, wenn Sie ihn neu erstellen müssen.

Jede Hilfe sehr geschätzt, danke!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage