Vor kurzem hatte ich mich bereits mit dem ersten Teil der “Ergebnisverwaltung” an alle fussballverrückten Zocker gerichtet.
Heute geht es weiter mit der Auswertung der gespeicherten Spielpaarungen. Wer erziehlt bessere Ergebnisse, wenn er als Heim, wer bessere Ergebnisse, wenn er als Gast antritt. Oder wer steht, wenn man den Durchschnitt betrachtet, am Besten da?
Das sind die entscheidenen Fragen, die es zu klären gilt.
Für mein Beispiel werde ich mit Datenbankviews arbeiten. Zuerst erstellen wir uns also die Heim-
CREATE OR REPLACE VIEW standings_home as SELECT home_oppponent_id as opponent_id, count(DISTINCT fixtures_id) as games, sum(CASE WHEN home_goals > away_goals THEN 1 ELSE 0 END) as wins, sum(CASE WHEN home_goals = away_goals THEN 1 ELSE 0 END) as draws, sum(CASE WHEN home_goals < away_goals THEN 1 ELSE 0 END) as loses, sum(home_goals) as goals_for, sum(away_goals) as goals_against, (sum(home_goals) - sum(away_goals)) as goals_difference, sum( CASE WHEN home_goals > away_goals THEN 3 WHEN home_goals = away_goals THEN 1 ELSE 0 END) as points FROM fixtures GROUP BY home_oppponent_id
und dann die Gast-Tabelle als Datenbankview:
CREATE OR REPLACE VIEW standings_away as SELECT away_oppponent_id as opponent_id, count(DISTINCT fixtures_id) as games, sum(CASE WHEN away_goals > home_goals THEN 1 ELSE 0 END) as wins, sum(CASE WHEN away_goals = home_goals THEN 1 ELSE 0 END) as draws, sum(CASE WHEN away_goals < home_goals THEN 1 ELSE 0 END) as loses, sum(away_goals) as goals_for, sum(home_goals) as goals_against, (sum(away_goals) - sum(home_goals)) as goals_difference, sum( CASE WHEN away_goals > home_goals THEN 3 WHEN away_goals = home_goals THEN 1 ELSE 0 END) as points FROM fixtures GROUP BY away_oppponent_id
Aus diesen beiden Datenbankviews kann dann ganz einfach die komplette Tabelle berechnet werden. Dies ebenfalls als Datenbankview
CREATE OR REPLACE VIEW standings as SELECT opponent_id, sum(games) as games, sum(wins) as wins, sum(draws) as draws, sum(loses) as loses, sum(goals_for) as goals_for, sum(goals_against) as goals_against, sum(goals_difference) as goals_difference, sum(points) as points FROM ( SELECT * FROM standings_home UNION ALL SELECT * FROM standings_away ) as inner_view GROUP BY oppponent_id
Ggf. kann es je nach Umfang der vorliegenden Spielpaarungen aber sinnvoller sein, dass mit vorberechneten Tabellen gearbeitet wird. Ist eine Vorberechnung der Heim- und Gast-Tabelle notwendig, dann kann die Datenbankview für die Gesamt-Tabelle aber weiterhin verwendet werden, sofern die Namen der Tabellen denen der Datenbankviews entsprechen.
Da meine vorgestellte Art der Verwaltung es zulässt, dass der eine Spieler mehr und der andere weniger Spiele hat, finde ich es sinnvoll, auch eine Auswertung mit Durchschnittswerten zu haben. Als Grundlage dafür greifen wir auf unsere 'standings'-Tabelle zu:
CREATE OR REPLACE VIEW standings_avg as SELECT opponent_id, games, CASE WHEN games > 0 THEN round(wins/games,1) ELSE 0 END as wins, CASE WHEN games > 0 THEN round(draws/games,1) ELSE 0 END as draws, CASE WHEN games > 0 THEN round(loses/games,1) ELSE 0 END as loses, CASE WHEN games > 0 THEN round(goals_for/games,1) ELSE 0 END as goals_for, CASE WHEN games > 0 THEN round(goals_against/games,1) ELSE 0 END as goals_against, CASE WHEN games > 0 THEN round(points/games,1) ELSE 0 END as points FROM standings
Mit diesen SQL-Statements haben wir nun die Grundlage für die Auswertung der Spielpaarungen geschaffen.
Um das Ganze optische auszuwerten und aufzubereiten, verwenden wir nun wieder PHP und Bootstrap. PHP um die Daten aus der Datenbank zu holen und für Bootstrap bereitzustellen.
Auf einem Desktop-Rechner kann es dann so aussehen:
Wie Ihr seht, kann man sich auch noch weitere Arten für die Tabellen überlegen, wie zum Beispiel eine Tabelle über die letzten 4 Wochen.
Da wir auch hier wieder Bootstrap genutzt haben, ist es nun ein Leichtes, die Tabellen für unterschiedlichen Devices zu optimieren, indem unwichtigere Informationen z.B. ausgeblendet werden.
Das war es auch schon mit der Ergebnisverwaltung. Ich hoffe meine Anregungen haben bei dem Einen oder Anderen das Interesse geweckt selber so eine kleine Ergebnisverwaltung zu erstellen. Wie Ihr seht, ist das es doch nicht so schwer, wie es auf den ersten Blick ausschaut.