我有一个包含体育比分和排名的数据库。我有一个像这样的排名表...
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
现在当我在下一场比赛中为Result6添加“W”时,有没有办法让它在积分榜中将Team1记录更新为6-0,或者如果它是“L”则将其更改为5-1 ?
答案 0 :(得分: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 ;
答案 1 :(得分:0)
这种方式的名称为“triggers”。更新后似乎与您的情况相符。
虽然正如其他人所说,但您的数据库设计远非完美。
基本上,@ r0xette提出了一个很好的建议:在你的“排名”表中保持胜利,失败和平局,然后你可以在触发器的更新中增加适当的列,你就不需要关心了之前的值并通过“游戏”表中的整组列/记录来计算你的“记录”对 - 你将在SELECT时间做,如:
SELECT concat( win, ' - ', loss) AS OverallRecord FROM standings WHERE team = 'team1';