Hallo!
Für unsere Fußball-Website haben wir die Daten für die Liga-Tabelle bis jetzt immer in einer mysql-Tabelle gespeichert. Dazu wird nach Eintragen des Spielergebnis per php-Script die neue Tabelle berechnet und abgespeichert. Ich möchte das aber jetzt in einer View erledigen, damit ich dieses php-script nicht mehr brauche.
Als Berechnungs-Basis habe ich 2 Tabellen. Einerseits eine Tabelle "spiel" wo die Ergebnisse drinstehen, und dann eine Tabelle "mannschaft" mit allen Mannschaften der jeweiligen Liga. Hier die Struktur der beiden Tabellen:
Tabelle spiel:
- liga_id
- saison_id
- spielwoche
- mannschaft_id_heim
- mannschaft_id_gast
- tore_heim
- tore_gast
- freigabe -> wird auf '1' gesetzt, sobald ein Ergebnis gültig ist
Tabelle mannschaft:
- mannschaft_id
- verein_id
- liga_id
- saison_id
Weiters hab ich mir bereits 2 Views gemacht. "vw_spielrunden" liefert mir alle Runden pro Liga. "vw_spielergebnis" liefert mir das Ergebnis pro Spiel, also ob es ein Heimsieg, ein Unentschieden, die Tore der Heimmannschft usw. Hier die Definitionen:
View vw_spielrunden
View vw_spielergebnis
Ich habe jetzt folgende View gebastelt:
Diese View liefert mir jetzt pro Liga, Mannschaft, Saison und Spielwoche die geschossenen Tore, Anzahl der Heimsiege, Auswärtssiege usw., genau wie ich das haben will. Das Problem ist aber dass ein select darauf ca. 60 Sekunden dauert!
Ich weiß jetzt nicht, was da so lange braucht. Die View liefert mir ca. 5000 Einträge. Das sollte ja eigentlich noch keine Probleme machen. Gibt es hier noch Möglichkeiten an den Indizes was zu verändern, oder sollte ich das ganz anders angehen?
Für unsere Fußball-Website haben wir die Daten für die Liga-Tabelle bis jetzt immer in einer mysql-Tabelle gespeichert. Dazu wird nach Eintragen des Spielergebnis per php-Script die neue Tabelle berechnet und abgespeichert. Ich möchte das aber jetzt in einer View erledigen, damit ich dieses php-script nicht mehr brauche.
Als Berechnungs-Basis habe ich 2 Tabellen. Einerseits eine Tabelle "spiel" wo die Ergebnisse drinstehen, und dann eine Tabelle "mannschaft" mit allen Mannschaften der jeweiligen Liga. Hier die Struktur der beiden Tabellen:
Tabelle spiel:
- liga_id
- saison_id
- spielwoche
- mannschaft_id_heim
- mannschaft_id_gast
- tore_heim
- tore_gast
- freigabe -> wird auf '1' gesetzt, sobald ein Ergebnis gültig ist
Tabelle mannschaft:
- mannschaft_id
- verein_id
- liga_id
- saison_id
Weiters hab ich mir bereits 2 Views gemacht. "vw_spielrunden" liefert mir alle Runden pro Liga. "vw_spielergebnis" liefert mir das Ergebnis pro Spiel, also ob es ein Heimsieg, ein Unentschieden, die Tore der Heimmannschft usw. Hier die Definitionen:
View vw_spielrunden
Code:
select distinct spielwoche, liga_id, saison_id from spiel
Code:
select liga_id, saison_id, spielwoche, mannschaft_id_heim, mannschaft_id_gast, tore_heim, tore_gast, if((tore_heim > tore_gast),1,0) AS sieg_heim, if((tore_heim = tore_gast),1,0) AS remis, if((tore_heim < tore_gast),1,0) AS sieg_gast from spiel where freigabe = '1'
Code:
select m.mannschaft_id, m.liga_id, m.saison_id, r.spielwoche, m.verein_id, sum(heim.tore_heim) as tore_plus_heim, sum(heim.tore_gast) as tore_minus_heim, sum(heim.sieg_heim) as siege_heim, sum(heim.remis) as remis_heim, sum(heim.sieg_gast) as niederlagen_gast, sum(ausw.tore_gast) as tore_plus_ausw, sum(ausw.tore_heim) as tore_minus_ausw, sum(ausw.sieg_gast) as siege_ausw, sum(ausw.remis) as remis_ausw, sum(ausw.sieg_heim) as niederlagen_ausw from mannschaft m join vw_spielrunden r on r.liga_id = m.liga_id and r.saison_id = m.saison_id left join vw_spielergebnis heim on heim.liga_id = m.liga_id and heim.saison_id = m.saison_id and heim.mannschaft_id_heim = m.mannschaft_id and heim.spielwoche <= r.spielwoche left join vw_spielergebnis ausw on ausw.liga_id = m.liga_id and ausw.saison_id = m.saison_id and ausw.mannschaft_id_gast = m.mannschaft_id and ausw.spielwoche <= r.spielwoche group by m.liga_id, m.mannschaft_id, m.saison_id, r.spielwoche
Ich weiß jetzt nicht, was da so lange braucht. Die View liefert mir ca. 5000 Einträge. Das sollte ja eigentlich noch keine Probleme machen. Gibt es hier noch Möglichkeiten an den Indizes was zu verändern, oder sollte ich das ganz anders angehen?
Comment