Hallo zusammen,
ich habe festgestellt, dass die SQL-Abfrage aus meinem letzten Beitrag noch zu unpräzise ist. Ich erhalte ja aktuell die Gesamtstatistik eines Spielers aus einer Saison.
Nun kann es allerdings in einer Saison fünf verschiedene Wettbewerbstypen (Liga, Landespokal, DFB-Pokal, Testspiel, Relegation) geben. Ich möchte gerne pro Saison die jeweiligen Gesamtsummen für diese Wettbewerbe erhalten.
Ich könnte nun meine bestehende SQL-Abfrage entsprechend erweitern, die liefert im Test auch schon die korrekten Daten. Dabei entsteht allerdings ein ziemliches Monstrum an Abfrage. Ich habe meine Zweifel, ob man das so tun sollte. Hier die erweiterte Abfrage mit zwei verschiedenen Wettbewerbstypen (eigentlich sind es wie gesagt fünf):
SELECT
saison_spieler.saison_id,
saison_spieler.nr,
saison_spieler.pos,
saison.name,
saison.jahr,
liga.einsaetze, liga.eingew, liga.ausgew, liga.spielzeit, liga.tore, liga.vorlagen, liga.gelb, liga.gelb_rot, liga.rot,
pokal.einsaetze, pokal.eingew, pokal.ausgew, pokal.spielzeit, pokal.tore, pokal.vorlagen, pokal.gelb, pokal.gelb_rot, pokal.rot
FROM
`saison_spieler`
JOIN
`saison`
ON saison.id = saison_spieler.saison_id
JOIN
(SELECT
spieltag.saison_id,
COUNT(spielerstatistik.spieler_id) AS einsaetze,
COUNT(spielerstatistik.eingew) AS eingew,
COUNT(spielerstatistik.ausgew) AS ausgew,
SUM(spielerstatistik.spielzeit) AS spielzeit,
SUM(spielerstatistik.tore) AS tore,
SUM(spielerstatistik.vorlagen) AS vorlagen,
COUNT(spielerstatistik.gelb) AS gelb,
COUNT(spielerstatistik.gelb_rot) AS gelb_rot,
COUNT(spielerstatistik.rot) AS rot
FROM
spielerstatistik
JOIN
spieltag
ON spieltag.id = spielerstatistik.spieltag_id
WHERE
spielerstatistik.spieler_id = 12 AND spieltag.wettbewerb = 1
GROUP BY
saison_id
) AS liga
ON liga.saison_id = saison_spieler.saison_id
JOIN
(SELECT
spieltag.saison_id,
COUNT(spielerstatistik.spieler_id) AS einsaetze,
COUNT(spielerstatistik.eingew) AS eingew,
COUNT(spielerstatistik.ausgew) AS ausgew,
SUM(spielerstatistik.spielzeit) AS spielzeit,
SUM(spielerstatistik.tore) AS tore,
SUM(spielerstatistik.vorlagen) AS vorlagen,
COUNT(spielerstatistik.gelb) AS gelb,
COUNT(spielerstatistik.gelb_rot) AS gelb_rot,
COUNT(spielerstatistik.rot) AS rot
FROM
spielerstatistik
JOIN
spieltag
ON spieltag.id = spielerstatistik.spieltag_id
WHERE
spielerstatistik.spieler_id = 12 AND spieltag.wettbewerb = 2
GROUP BY
saison_id
) AS pokal
ON pokal.saison_id = saison_spieler.saison_id
WHERE
saison_spieler.spieler_id = 12
Offenbar ist das prinzipiell für MySQL keine große Herausforderung. Ich bekomme in phpmyadmin die Auskunft "Die Abfrage dauerte 0,0000 Sekunden". Aber dennoch frage ich ja fünfmal die gleiche Art von Daten ab. In PHP kann ich die Erstellung des Querys in eine Funktion packen und somit Redundanzen vermeiden. Sollte/könnte ich das auch in SQL tun? Bewegt sich der Query noch einem "normalen" Rahmen? Ich hatte so etwas bisher noch nicht.
Schöne Grüße
Nico