Как объединить несколько таблиц, включая таблицу поиска, и возвращать данные в строках

Я пытаюсь отобразить некоторые простые результаты компьютерной игры и упростить итерацию результатов в каждой строке моего кода. Я хочу, чтобы все соответствующие данные для каждой игры были в каждой записи, чтобы я мог вывести их все в одну строку, например:

Team A (score 45) vs. Team B (score 55), game duration: 5 mins Team C (score 60) vs. Team D (score 65), game duration: 4.3 mins

Таким образом, для игры есть две команды, которые играют друг с другом, и каждая из них получает счет в конце игры. По сути, в таблице games_teams для каждой игры есть две строки.

Вот моя схема:

schema pic

Вот данные моей таблицы:

table data pic

Вот результат, который я пытаюсь достичь, чтобы я мог легко перебрать результаты и вывести их на страницу:

desired output pic

Мне удалось добиться этого с помощью какого-то ужасающего 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, чтобы "было еще больше подзапросов".

Другой метод, который я попробовал, был:

not desired output pic

Я достиг этого с помощью следующего 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

Теперь этот путь будет труднее найти в коде, поскольку соответствующие данные для каждой игры находятся в двух разных записях. Мне нужно построить первую часть строки, затем перейти к следующей итерации цикла и распечатать следующую часть. Затем начните все сначала для следующей игры, я пытаюсь отобразить всю информацию в одну строку, например:

Команда A (оценка 45) против команды B (оценка 55), продолжительность игры: 5 минут

Вот почему я думаю, что было бы легче, если бы все было на одной записи. Есть ли способ сделать это красиво и поэтому он масштабируется, если мне нужно больше столбцов в таблице games_teams?

Здесь ссылка на вставку с кодом базы данных, если вам нужно воссоздать его.

Любая помощь высоко ценится, спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос