2017-02-21 9 views
0

У меня есть база данных со спортивными оценками и рейтингом. У меня есть таблица турнирной таблицы, как так ...Обновление таблицы MYSQL на основе значений, введенных во 2-й таблице

Team  Overall Record Conference Record 
Team1 5-0    2-0 
Team2 4-1    1-1 
Team3 3-2    0-2 

И у меня есть таблица результатов для игр ...

Team Result1 Result2 Result3 Result4 Result5 Result6 
Team1 W  W   W  W   W 
Team2 W  L   W  W   W 
Team3 W  L   L  W   W 

Теперь, когда я добавить «W» в Result6 к следующей игре , есть ли способ обновить запись Team1 до 6-0 в таблице турнирных таблиц, или если это «L», а затем изменить ее на 5-1?

+0

Ваша структура данных действительно необходимо быть улучшенными. Сохранение результатов в разных столбцах - это не SQLish способ хранения повторяющихся данных. –

+0

Почему бы не получить Win, Loss, Total games вместо этого? – r0xette

ответ

0

У вас плохая структура стола, и у меня тоже плохое предложение!

SET @teamname := 'team1'; 

SELECT @myres := concat(Result1,Result2,Result3,Result4,Result5,Result6) -- and other columns 
FROM results 
WHERE team = @teamname; 

UPDATE sports_score 
SET overal = concat(
     length(@myres)-length(replace(@myres,'W','')) 
,'-', 
     length(@myres)-length(replace(@myres,'L','')) 
) 
WHERE team = @teamname ; 
0

Этот способ имеет название "triggers". ПОСЛЕ ОБНОВЛЕНИЯ, похоже, соответствует вашему делу.

Хотя, как и было предложено, ваш дизайн БД далеко не идеален.

В принципе, @ r0xette сделал отличное предложение: держите победу, потерю, рисуйте в своей таблице «standings», тогда вы можете просто увеличить соответствующий столбец в обновлении, сделанным вашим триггером, и вам не нужно будет заботиться о предыдущие значения и пройти через весь набор столбцов/записей в таблице «игры», чтобы рассчитать свой «рекорд» пару - вы будете делать это в SELECT, время, как:

SELECT concat(win, ' - ', loss) AS OverallRecord FROM standings WHERE team = 'team1';