本文介紹了MySQL中INSERT后兩行值的條件增量的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我目前在足球數(shù)據(jù)庫(kù)中有以下三個(gè)表:
teams(name)
season(name, beginning, end)
game(id, Date, season, hometeam, awayteam, HomeTeamScore, AwayTeamScore)
(hometeam, awayteam and season are foreign keys)
現(xiàn)在我想要一個(gè)新的表,用來(lái)記錄每支球隊(duì)的得分和丟球情況,以及他們?cè)诿總€(gè)賽季的得分(每次平局一分,每次勝利三分)。這將使其能夠輕松獲得排名。
我想過(guò)做這樣一張表:
stats(season, team, goalsscored, goalsconcedded, points)
然后我還會(huì)在每次插入新游戲時(shí)更新它。該表將為每個(gè)球隊(duì)+賽季組合包含一行。我不確定這是不是最好的解決方案,因?yàn)槲抑牢乙肓巳哂啵捎诖诵畔⑿枰?jīng)常計(jì)算,我認(rèn)為它可能有用。我想創(chuàng)建一個(gè)觸發(fā)器來(lái)更新此信息,但我不知道如何做到這一點(diǎn):我必須更新統(tǒng)計(jì)表中的兩行,這取決于哪支球隊(duì)正在打這場(chǎng)比賽,并且根據(jù)他們是在主場(chǎng)還是客場(chǎng)比賽,我需要用不同的值來(lái)更新這些行。
理想情況下,如果還沒(méi)有為比賽所指的賽季插入球隊(duì),則此觸發(fā)器應(yīng)該會(huì)在這個(gè)新表中創(chuàng)建一個(gè)條目,但我甚至不確定MySQL中是否可能出現(xiàn)這種情況。
我知道我沒(méi)有提供我所做的任何測(cè)試,但這是因?yàn)槲掖_實(shí)在網(wǎng)上找不到類似的請(qǐng)求(或者更廣泛地說(shuō),為了能夠輕松地查詢所請(qǐng)求的信息)。
此外,對(duì)于如何處理這種情況,我愿意接受更好的想法。
推薦答案
只有一個(gè)視圖比使用觸發(fā)器維護(hù)冗余數(shù)據(jù)容易得多;這只是一個(gè)聯(lián)合的基本總和:
create view stats as (
select season, team, sum(goalsscored) goalsscored, sum(goalsconcedded) goalsconcedded, sum(points) points
from (
select season, hometeam team, HomeTeamScore goalsscored, AwayTeamScore goalsconcedded,
case when HomeTeamScore > AwayTeamScore then 3 when HomeTeamScore=AwayTeamScore then 1 else 0 end points
from game
union all
select season, awayteam team, AwayTeamScore goalsscored, HomeTeamScore goalsconcedded,
case when AwayTeamScore > HomeTeamScore then 3 when AwayTeamScore=HomeTeamScore then 1 else 0 end points
from game
) games
group by season, team
);
這篇關(guān)于MySQL中INSERT后兩行值的條件增量的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,