Erhöhen Sie nach dem Einfügen von Daten in MySQL zwei Werte bedingt
P粉937382230
2023-09-02 10:52:17
<p>Ich habe derzeit die folgenden drei Tabellen in einer Fußballdatenbank:</p>
<pre class="brush:php;toolbar:false;">teams(name)
Saison (Name, Anfang, Ende)
Spiel (ID, Datum, Saison, Heimmannschaft, Auswärtsmannschaft, HomeTeamScore, AwayTeamScore)
(Heimmannschaft, Auswärtsmannschaft und Saison sind Fremdschlüssel)</pre>
<p>Jetzt möchte ich eine neue Tabelle haben, in der die von jeder Mannschaft geschossenen und kassierten Tore sowie die Punkte, die sie in jeder Saison erzielt haben (ein Punkt für jedes Unentschieden, drei für jeden Sieg), erfasst werden. Dadurch wird es einfacher, ein Ranking zu erhalten. </p>
<p>Ich habe darüber nachgedacht, eine Tabelle wie diese zu erstellen:</p>
<pre class="brush:php;toolbar:false;">stats(Saison, Team, erzielte Tore, kassierte Tore, Punkte)</pre>
<p>Jedes Mal, wenn ein neuer Treffer eingefügt wird, aktualisiere ich auch diese Tabelle. Diese Tabelle enthält eine Zeile für jede Kombination aus Team und Saison. Ich bin mir nicht sicher, ob dies die beste Lösung ist, da ich weiß, dass ich Redundanz einführe, aber da diese Informationen häufig berechnet werden müssen, dachte ich, dass sie nützlich sein könnten. Ich möchte einen Auslöser erstellen, um diese Informationen zu aktualisieren, weiß aber nicht wirklich, wie ich das machen soll: Je nachdem, welches Team am Spiel teilnimmt, muss ich zwei Zeilen in der Statistiktabelle aktualisieren, und je nachdem, ob dies der Fall ist Ob ich zu Hause oder unterwegs bin, ich muss sie mit anderen Werten aktualisieren. </p>
<p>Idealerweise sollte dieser Trigger einen Eintrag in dieser neuen Tabelle erstellen, wenn das Team keinen Datensatz für die Saison eingefügt hat, zu der das Spiel gehört, aber ich bin mir nicht einmal sicher, ob eine solche Bedingung in MySQL möglich ist.
Ich weiß, dass ich keine von mir durchgeführten Tests angegeben habe, aber das liegt daran, dass ich online wirklich keine ähnliche Anfrage finden konnte (oder allgemeiner gesagt, keine, die es einfach macht, die benötigten Informationen abzufragen). </p>
<p>Außerdem bin ich offen für bessere Ideen, wie man mit dieser Situation umgehen kann. </p>
我认为你应该考虑这样的结构:
这个结构也不是最佳的。 在我个人的意见中,你可以采用更好的结构:
Goal表将用于记录每个进球,然后你可以从中构建比赛结果,避免使用“HomeTeamScore”和“AwayTeamScore”字段。
至于Stats表,你需要知道谁赢得了积分,所以让我们坚持使用我们最后的表结构:
Matches中的status字段值可以是:['1','X','2']
这样,你就可以轻松地拥有一切来计算你的统计数据,例如对于ID为12的球队:
你可以以此为起点,构建一个稍微复杂一点的查询,使用group by和group函数来计算球队的统计数据。 一旦你成功创建了这样的查询,我建议使用视图
顺便说一下,你想要执行的这些查询并不重,你不一定需要触发器,首先考虑好数据库设计!
比使用触发器维护冗余数据要简单得多的方法是使用视图;这只是一个基本的联合求和: