Ligaverwaltung, Teil 5: Tabellen berechnen

In den ersten vier Teilen dieser Artikelreihe haben wir die Grundlagen geschaffen, damit Sie Ligen, Mannschaften, Spieljahre und Spieltage eingeben und verwalten können. Außerdem kann der Benutzer nun eine Liga und einen Spieltag auswählen und Ergebnisse eingeben. Dieses Formular wollen wir nun dahingehend ergänzen, dass es in einem weiteren Unterformular den zu den Ergebnissen passenden Tabellenstand abbildet.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 2001_Ligaverwaltung_5.accdb.

Tabellen berechnen

Bevor wir an die technischen Feinheiten gehen, schauen wir uns an, wie die Tabelle überhaupt berechnet wird. In der Tabelle tblSpielpaarungen werden nicht nur die Paarungen eingetragen, sondern auch die Tore der Heim- und der Auswärtsmannschaft und die daraus resultierenden Punkte für die Heim- und die Auswärtsmannschaft (siehe Bild 1).

Ergebnisse und Punkte in der Tabelle tblSpielpaarungen

Bild 1: Ergebnisse und Punkte in der Tabelle tblSpielpaarungen

Diese Daten sind die Grundlage zur Berechnung der Tabelle der Liga. Dazu werden die Ergebnisse aller Spielpaarungen bis zu dem angegebenen Spieltag zusammengefasst und ausgewertet.

Dabei addieren wir für jede Mannschaft zunächst die erzielten Punkte. Es gibt drei Punkte für einen Sieg, einen Punkt für ein Unentschieden und keinen Punkt für eine Niederlage. Sieg, Unentschieden und Niederlage sind leicht definiert: Bei einem Sieg hat die Gewinnermannschaft mehr Tore als die Verlierermannschaft, bei einem Unentschieden haben beide gleich viele Tore und bei einer Niederlage hat die unterlegene Mannschaft weniger Tore als die Gewinnermannschaft.

Die Punkte werden bereits bei der Eingabe der Tore einer Spielpaarung eingetragen, wie wir bereits im vierten Teil dieser Artikelreihe erläutert haben.

Um die Reihenfolge in der Tabelle zu bestimmen, gibt es folgende Kriterien:

  • Das erste und wichtigste Kriterium ist die Anzahl der Punkte, die für Siege und Unentschieden vergeben werden. Die Mannschaften werden in absteigender Reihenfolge zuerst nach der Anzahl dieser Punkte sortiert.
  • Wenn zwei oder mehr Mannschaften die gleiche Anzahl an Punkten aufweisen, wird das Torverhältnis herangezogen. Das Torverhältnis ist die Differenz aus den geschossenen Toren zu den Gegentoren bis zu dem zu berechnenden Spieltag. Das Torverhältnis kann eine positive Zahl, eine negative Zahl oder 0 sein.
  • Wenn zwei Mannschaften die gleiche Anzahl Punkte und das gleiche Torverhältnis aufweisen, kommt die Anzahl der geschossenen Tore zum Tragen. Die Mannschaft, die mehr Tore geschossen hat, erhält den höheren Tabellenplatz. Ein Torverhältnis von 10:8 ist also beispielsweise besser als 9:7.

Sollte die Reihenfolge danach immer noch nicht eindeutig geklärt sein, kommen weitere Regeln zum Einsatz:

  • Dann betrachtet man die Ergebnisse der betroffenen Mannschaften gegeneinander. Die Mannschaft, die mehr Tore geschossen hat, steht in der Tabelle über der anderen Mannschaft. Lauten die Ergebnisse zwischen Mannschaft 1 und Mannschaft 2 zum Beispiel 2:1 und 1:3, dann steht Mannschaft 2 vor Mannschaft 1.
  • Danach werden die auswärts erzielten Tore in den direkten Partien der gleichrangigen Mannschaften verglichen. Hat Mannschaft 1 zuhause 1:0 gewonnen und Mannschaft 2 zuhause 2:1 gewonnen, liegt Mannschaft 1 vor Mannschaft 2, da sie auswärts ein Tor geschossen hat, Mannschaft 2 jedoch keines.
  • Liegen die beiden Mannschaften immer noch gleichauf, gibt es ein Entscheidungsspiel.

Wir wollen in dieser Lösung nur die ersten drei Regeln berücksichtigen.

Ergebnisse zusammenzählen

Wir wollen zuerst einen für uns einfacheren Weg gehen, indem wir die beiden Tabellen tblTabellenpositionen und tblTabellenstaende per VBA aus den bestehenden Ergebnissen füllen. Die Tabelle tblTabellenstaende enthält neben dem Primärschlüsselfeld nur ein Feld namens SpieltagID, das wiederum einen der Spieltage aus der Tabelle tblSpieltage referenziert.

Die Tabelle tblTabellenpositionen ist über das Fremdschlüsselfeld TabellenstandID mit der Tabelle tblTabellenstaende verknüpft (siehe Bild 2).

Tabelle zum Speichern der Tabellenstände

Bild 2: Tabelle zum Speichern der Tabellenstände

In diese Tabelle tragen wir über das Fremdschlüsselfeld MannschaftID die Mannschaft dieser Tabellenposition ein. Die übrigen Felder enthalten die Anzahl der Spiele, der Siege, der Unentschieden, der Niederlagen, der Tore und der Punkte für und gegen die genannte Mannschaft.

Die Gegenpunkte benötigen wir in der Berechnung der Fußballbundesliga beispielsweise nicht, da es hier nur Pluspunkte gibt. In anderen Ligen gibt es noch das alte System, wie es früher auch in der Bundesliga verwendet wurde, bei der ein Sieg 2:0 Punkte brachte und ein Unentschieden 1:1 Punkte.

Berechnung des Tabellenstands

Die Berechnung ist recht kompliziert, weil sie einige Schritte erfordert. Wir skizzieren diese vorab:

  • Wir haben die Tabelle tblSpielpaarungen, die die Ergebnisse in Form der Tore der Heim- und der Auswärtsmannschaft enthält sowie die Punkte für das jeweilige Spiel.
  • Diese Daten müssen wir so zusammenbringen, dass wir für jede Mannschaft die Summe der Punkte, Tore und Gegentore ermitteln können. In der Tabelle tblSpielpaarungen enthält jeder Datensatz zwei Mannschaften mit den entsprechenden Daten. Diese wollen wir mit geeigneten Abfragen so umformen, dass wir pro Datensatz eine Mannschaft mit den Punkten aus dem Spiel sowie den Toren und den Gegentoren erhalten.
  • Das lässt sich nicht mit einer einzigen Abfrage erledigen, denn wir müssen in einer Abfrage die Daten der jeweiligen Heimmannschaft ermitteln und in einer weiteren Abfrage die Daten der Auswärtsmannschaft. Die Gelegenheit nutzen wir und berechnen gleich noch die Tordifferenz, die sich aus dem Ergebnis des Spiels ergibt – also die Anzahl der Tore minus die Anzahl der Gegentore.
  • Die Daten dieser beiden Abfragen führen wir dann mithilfe einer UNION-Abfrage zusammen. Damit erhalten wir ein Resultat, das alle Mannschaften mit dem Ergebnis enthält.
  • Schließlich erstellen wir eine letzte Abfrage, welche die Ergebnisse der vorherigen Abfrage verwendet und diese für die per Parameter übergebene Liga und den gewünschten Spieltag ermittelt.

Abfrage zur Ermittlung der Tabellenstände für die Heimmannschaften

Die erste Abfrage heißt qryHeimergebnisse. Sie verwendet die Daten der Tabellen tblSpielpaarungen und tblSpieltage als Datenquelle.

Diese ist wie in Bild 3 aufgebaut.

Abfrage zum Anzeigen der Spieldaten der Heimmannschaften

Bild 3: Abfrage zum Anzeigen der Spieldaten der Heimmannschaften

Sie enthält die folgenden Felder:

  • MannschaftID: Feld mit dem Ausdruck HeimmannschaftID. Fremdschlüsselfeld zur Tabelle tblMannschaften
  • Tore: Feld mit dem Ausdruck ToreHeimmannschaft. Anzahl der Tore der Heimmannschaft
  • Gegentore: Feld mit dem Ausdruck ToreAus-waertsmannschaft. Anzahl der Tore der Auswaertsmannschaft
  • Tordifferenz: Feld mit dem Ausdruck [ToreHeimmannschaft] – [ToreAuswaertsmannschaft]
  • Punkte: Feld mit dem Ausdruck PunkteHeimmannschaft. Punkte der Heimmannschaft
  • Sieg: Feld mit dem Ausdruck -1*([Tore-Heim-mannschaft]>[ToreAuswaertsmannschaft]). Zur Erläuterung: Wenn ToreHeimmannschaft größer ist als ToreAuswaertsmannschaft, haben wir einen Heimsieg. Dann soll das Feld Sieg den Wert 1 erhalten. Wenn ToreHeimmannschaft nicht größer als ToreAuswaertsmannschaft ist, soll das Feld den Wert 0 liefern. Wenn ToreHeimmannschaft > ToreAuswaertsmannschaft den Wert -1 liefert, müssen wir diesen Wert nur noch mit -1 multiplizieren, um den Wert 1 zu erhalten. Ist die Bedingung nicht erfüllt, was den Wert 0 (für False) liefert, ergibt das Produkt mit der Zahl -1 immer noch den Wert 0 – es passt also für alle möglichen Ergebnisse.
  • Unentschieden: Feld mit dem Ausdruck -1 * ([ToreHeimmannschaft] = [ToreAuswaertsmannschaft]). Hier gilt das Gleiche wie im Feld zuvor – nur, das wir prüfen, ob ToreHeimmannschaft gleich ToreAuswärtsmannschaft ist.
  • Niederlage: Feld mit dem Ausdruck -1 * ([ToreHeimmannschaft] < [ToreAuswaertsmannschaft]). Erläuterung siehe oben unter Sieg.
  • LigaSpieljahrID: Fremdschlüsselfeld zur Tabelle tblLigenSpieljahre
  • Spieltag: Nummer des Spieltags

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar