alpman: [MySQL] Bitte mal Konzept anschauen

Beitrag lesen

Hallo zusammen,

Ich habe eine Datenbank mit folgenden Tabellen:

game: id, name, ...
round: id, round, game_id ...
placing: id, round_id, player_id
player: id, name, ...

Es kann also i Spiele geben, die jeweils n Runden haben, die jeweils mit m Platzierungen verknüpft sind. Pro Platzierung gibt es einen Spieler.

Diese Struktur habe ich mir ausgedacht, um folgendes abzubilden:

Spiel 1
Runde 1
1. Stefan
2. Christian
m. ...
Runde 2
1. Falko
2. Christian
m ...
Runde n
...

Spiel i
...

Es soll nun auch eine Bestenliste geben. Dazu haben wir einen Punkteverteilungschlüssel, der abhängig von der Anzahl der Spieler pro Runde ist, entwickelt.

Die Bestenliste soll diese Überschriften haben:

Platz|Spieler|Punkte|Spiele|Punkte/Spiel|Runden|Punkte/Runde

(Die Platzierung richtet sich nach der Anzahl der Punkte, die ein Spieler in den Spielen gesammelt hat).

Mit der Anweisung

  
SELECT player.name AS Spieler, COUNT(DISTINCT game.id) AS Spiele, COUNT(DISTINCT round.id) AS Runden FROM game, round, placing, player  
    -> WHERE game.id = round.game_id  
    -> AND round.id = placing.round_id  
    -> AND placing.player_id = player.id GROUP BY player.name;  

bekomme ich schon mal Name|Spiele|Runden.

+-----------+--------+--------+
| Spieler   | Spiele | Runden |
+-----------+--------+--------+
| Alexander | 2      | 7      |
| Benno     | 2      | 7      |
| Christian | 2      | 7      |
| David     | 2      | 7      |
| Falko     | 2      | 7      |
| Stefan    | 2      | 7      |
+-----------+--------+--------+

Ich könnte nun die Berechnung der Punkte, Punkte/Spiel und Punkte/Runde mittels PHP durchführen. Ich weiß nun aber nicht, ob dieser Weg einfacher (unkomplizierter) ist, als die Berechnung mit SQL (eigentlich möchte ich wissen, ob und wie es mit SQL geht :)).

Ich habe mir überlegt, eine Tabelle point_allocation mit folgenden Feldern anzulegen: id, nr_players, place, points_for_place.

Pro Spiel muss ich die Anzahl der Runden ermitteln und dann innerhalb der einzelnen Runden die Platzierungen der einzelnen Spieler. Mit diesen Informationen müsste ich auf die Tabelle point_allocation zugreifen und die Punkte zusammenzählen.

Weiß jemand Rat? Da ich mit SQL noch nicht soviel Erfahrung habe, erwarte ich eine sehr komplizierte bzw. umfangreiche Anweisung.

Ich möchte ungern die Punkte bei den Spieler speichern (eventuell ändert sich der Schlüssel; wenn Runden gelöscht werden, müssten auch die Spieler verändert werden).

Viele Grüße,

Stefan