Hallo Hagen,
Nur ist das "Ausrechenprogramm" was die mitgeschickt habe besch... . Also sag ich "mutti ich bau dir n neues". Und da steh ich nun.
Ich habe hier immer Freitags oder in der Mittagspause mit einem Kollegen in einem kleinen Wettbewerb ein WM-Tippspiel zusammengebastetlt: Er mit MySQL und PHP und meine Wenigkeit mit Access und ASP.NET.
Hier meine Lösung für die Datenbank:
Tab1: [teams]
teamabbreviation (PK)
teamname
[group]
[rank]
[lot]
Tab2: [games]
gameid (PK)
teamhome
teamaway
scorehome
scoreaway
addinfo
penaltyhome
penaltyaway
venue
gamedate
gameplayed
Tab3: [bets]
userid (PK)
gameid (PK)
bethome
betaway
points
[timestamp]
Aus den Tabellen läßt sich über Views und parametriesierbare Abfragen alles wunderschön herleiten. Einfachste Übung ist eine Punkterangliste:
SELECT users.userid, SUM(bets.points) AS points
FROM users LEFT JOIN tips ON users.userid=bets.userid GROUP BY users.userid ORDER BY SUM(bets.points) DESC
Für die Ausgabe der Gruppentabellen muss man etwas überlegen. Habe mehrere Views angelegt, um die siegreiche und unterlegene Mannschaft rauszubekommen, hier ein Bspl für die "hometeamwins":
SELECT gameid, teamhome, teamaway, scorehome, scoreaway, gameplayed
FROM games
WHERE (scorehome>scoreaway AND games.gameplayed=True)
Die Heim- und Auswärtssiege habe ich dann zu "wins" geuniont:
SELECT gameid, teamaway as winner, teamhome as looser, scoreaway as winnergoals, scorehome as loosergoals FROM awayteamwins WHERE gameid<49 UNION select
gameid, teamhome as winner, teamaway as looser, scorehome as winnergoals, scoreaway as loosergoals FROM hometeamwins WHERE gameid<49
Dann wieder eine Union wins, draws und losses zu "groupphasegames":
SELECT * FROM wins UNION SELECT * FROM losses UNION SELECT * FROM draws
Die daraus entstehende view kann man dann mit der TeamTab joinen zu "view_tablegoals":
SELECT teams.teamabbreviation, Count(groupphasegames.looser) AS numbergamesplayed, Sum(groupphasegames.winnergoals) AS goalsshot, Sum(groupphasegames.loosergoals) AS goalsconceded, ([goalsshot])-([goalsconceded]) AS goaldifference
FROM teams LEFT JOIN groupphasegames ON teams.teamabbreviation=groupphasegames.winner
GROUP BY teams.teamabbreviation
Dann benötigt man noch die Anzahl der Siege, Niederlagen und Unentschieden pro Team, zB:
SELECT teams.teamabbreviation, Count(wins.winner) AS numberwins
FROM teams LEFT JOIN groupphasegames ON teams.teamabbreviation=wins.winner GROUP BY teams.teamabbreviation
Daraus kann man sich wiederum die Punkte errechnen als "view_tablepoints":
SELECT teams.group, teams.teamname, teams.teamabbreviation, numberwins.numberwins, numberdraws.numberdraws, numberlosses.numberlosses, ((numberwins.numberwins*3)+(numberdraws.numberdraws*1)) AS points
FROM ((numberlosses INNER JOIN teams ON numberlosses.teamabbreviation = teams.teamabbreviation) INNER JOIN numberwins ON teams.teamabbreviation = numberwins.teamabbreviation) INNER JOIN numberdraws ON teams.teamabbreviation = numberdraws.teamabbreviation
ORDER BY ((numberwins.numberwins*3)+(numberdraws.numberdraws*1)) DESC
Und zum Schluss dann noch der Join zwischen den Views view_tablegoals und view_tablepoints....
Mit ein bisschen Nachdenken eigentlich ganz logisch...;o)
Gruß
LeKuchen