alpman: [MySQL] Bitte mal Konzept anschauen

Beitrag lesen

Hallo Ilja,

Ich taste mich langsam heran.

Meine Tabellen habe ich doch so gelassen, wie ich sie entworfen habe:

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

Außerdem noch die Tabelle point_allocation:
id, nr_players, place, points

Die hat im Moment folgenden Inhalt:
+------------+-------+--------+
| nr_players | place | points |
+------------+-------+--------+
| 5          | 1     | 42     |
| 5          | 2     | 25     |
| 5          | 3     | 12     |
| 5          | 4     | 4      |
| 5          | 5     | 0      |
| 6          | 1     | 50     |
| 6          | 2     | 30     |
| 6          | 3     | 15     |
| 6          | 4     | 4      |
| 6          | 5     | 1      |
| 6          | 6     | 0      |
| 7          | 1     | 58     |
| 7          | 2     | 35     |
| 7          | 3     | 18     |
| 7          | 4     | 5      |
| 7          | 5     | 1      |
| 7          | 6     | 0      |
| 7          | 7     | 0      |
+------------+-------+--------+

Mit der Anweisung

  
SELECT p.name AS Spieler,  
 COUNT(DISTINCT g.id) AS Spiele,  
 COUNT(DISTINCT r1.id) AS Runden,  
 SUM((SELECT pa.points FROM point_allocation pa  
 WHERE pa.nr_players = ANY  
  (SELECT COUNT(DISTINCT pg.id) FROM round r2  
  LEFT JOIN placing pg ON pg.round_id = r2.id  
  LEFT JOIN game g ON r2.game_id = g.id  
  WHERE r2.id = r1.id  
  GROUP BY r1.id)  
 AND pa.place = pg.place)) AS Punkte  
FROM player p  
LEFT JOIN placing pg ON pg.player_id = p.id  
LEFT JOIN round r1 ON pg.round_id = r1.id  
LEFT JOIN game g ON g.id = r1.game_id  
GROUP BY p.name ORDER BY Punkte DESC, Spiele DESC, Runden DESC;  

bekomme ich schon mal

+-----------+--------+--------+--------+
| Spieler   | Spiele | Runden | Punkte |
+-----------+--------+--------+--------+
| Christian | 2      | 7      | 280    |
| Stefan    | 2      | 7      | 148    |
| Alexander | 2      | 7      | 84     |
| Benno     | 2      | 7      | 76     |
| David     | 2      | 7      | 72     |
| Falko     | 2      | 7      | 40     |
| Stephan   | 0      | 0      | NULL   |
| Gregor    | 0      | 0      | NULL   |
| Jago      | 0      | 0      | NULL   |
+-----------+--------+--------+--------+

Vielen Dank für Deine Tipps. Nun habe ich mal probiert, die Spiele, Runden und Punkten Variablen zuzuweisen, und mit diesen weiter zu rechnen

  
...  
@nrSpiele := COUNT(DISTINCT g.id) AS Spiele,  
@nrRunden := COUNT(DISTINCT r1.id) AS Runden,  
@Punkte := SUM((SELECT pa.points FROM point_allocation pa  
...  
@Punkte/@nrSpiele AS "Punkte/Spiel"  

bekomme dann jedoch nur NULL in der Spalte "Punkte/Spiel". Ist das der richtige Weg?

Viele Grüße,

Stefan