У меня есть настройка базы данных с некоторыми примерами данных. У меня есть несколько команд за одним столом и их матчи в другом в их матче. У меня есть свои результаты за игры, в которые они уже играли. Я борюсь с логикой подсчета их побед и ничьих. Должен ли я обновить это в таблице команд при обновлении результатов (в таблице фикстур) или рассчитать ее по баллам в таблице фикстур. я не хотел делать это первым способом, так как это может считаться дублирующими данными, но я не могу понять логику того, как его вычислить. как вы можете сказать наверняка, это первая база данных, над которой я работал со связями между таблицами.
Я пытаюсь представить данные из вышеуказанных таблиц в таблицу лиги. для того, чтобы получить очки, мне нужно подсчитать выигранные / проигранные / проигранные игры, и я не могу понять, как это сделать (подсчитать, сколько раз команда хозяев выходила из команды гостей и т. д.)
Я уберу большинство cols из команд, если смогу рассчитать их по таблице.
любая помощь будет принята с благодарностью. Я могу предоставить дополнительную информацию, если это необходимо.
Наборы данных и расчеты, относящиеся к различным разновидностям спортивного мяча, на удивление сложны. Я написал код для генерации графиков матчей, основанных на доступности арены, и это не весело.
Во всяком случае, для того, чтобы сгенерировать нужный вам отчет без дублирования данных повсюду, как показано ниже должен работать, хотя я не смог проверить это.
SELECT t.team_name,
hr.home_win, hr.home_loss, hr.home_draw,
ar.away_win, ar.away_loss, ar.away_draw
FROM teams t
-- home record
INNER JOIN (
SELECT home_team AS 'team_name',
SUM(IF(home_team_score>away_team_score,1,0)) AS 'home_win',
SUM(IF(home_team_score<away_team_score,1,0)) AS 'home_loss',
SUM(IF(home_team_score=away_team_score,1,0)) AS 'home_draw'
FROM fixtures
GROUP BY home_team
) hr ON t.team_name = hr.team_name
-- away record
INNER JOIN (
SELECT away_team AS 'team_name',
SUM(IF(home_team_score<away_team_score,1,0)) AS 'away_win',
SUM(IF(home_team_score>away_team_score,1,0)) AS 'away_loss',
SUM(IF(home_team_score=away_team_score,1,0)) AS 'away_draw'
FROM fixtures
GROUP BY away_team
) ar ON t.team_name = ar.team_name
Теперь нормальный СУБД будет просто использовать COUNT(scoreA>scoreB)
, но так как это MySQL, я должен был придумать SUM(IF())
, играть на скрипке
Предполагая, что у вас не будет тысяч команд, это должно быть достаточно хорошо масштабировано.
Других решений пока нет …