Как объединить несколько таблиц, включая таблицу поиска, и возвращать данные в строках
Я пытаюсь отобразить некоторые простые результаты компьютерной игры и упростить итерацию результатов в каждой строке моего кода. Я хочу, чтобы все соответствующие данные для каждой игры были в каждой записи, чтобы я мог вывести их все в одну строку, например:
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 для каждой игры есть две строки.
Вот моя схема:
Вот данные моей таблицы:
Вот результат, который я пытаюсь достичь, чтобы я мог легко перебрать результаты и вывести их на страницу:
Мне удалось добиться этого с помощью какого-то ужасающего 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
Теперь этот путь будет труднее найти в коде, поскольку соответствующие данные для каждой игры находятся в двух разных записях. Мне нужно построить первую часть строки, затем перейти к следующей итерации цикла и распечатать следующую часть. Затем начните все сначала для следующей игры, я пытаюсь отобразить всю информацию в одну строку, например:
Команда A (оценка 45) против команды B (оценка 55), продолжительность игры: 5 минут
Вот почему я думаю, что было бы легче, если бы все было на одной записи. Есть ли способ сделать это красиво и поэтому он масштабируется, если мне нужно больше столбцов в таблице games_teams?
Здесь ссылка на вставку с кодом базы данных, если вам нужно воссоздать его.
Любая помощь высоко ценится, спасибо!