Liebe Experten,
ich bin gerade dabei für eine private Liga im Freundeskreis eine Tabelle zu erstellen. Diese wird mit Daten aus einer Datenbank gespeist. Dazu haben ich in der Datenbank 2 Tabellen angelegt:
- Spielerdaten (hier stehen alle relevanten Daten über die Spieler drin, u.a. Spielername und eine Spieler-ID, die der Spieler im Saisonverlauf besitzt)
- Spiele (hier stehen alle relevanten Daten über die einzelnen Spiele drin, u.a. Spieltag, Heimspieler-ID, Auswärtsspieler-ID, Tore usw.)
Um es kurz zu machen: Ich bin aktuell so weit, dass ich aus diesen Datenbank-Tabellen die entsprechenden Gesamtdaten jeder Spieler erreichen kann und damit auch eine Sport-Tabelle generieren kann. Soweit klappt alles gut.
Mein Problem ist allerdings, dass ich aktuell die Reihenfolge der Spieler in der Tabelle nur über Daten wie Punkte, Tordifferenz, Tore etc. erzeugen kann. Wäre das ok, wäre meine Tabelle bzw. der Code fertig. Jedoch möchte ich die Reihenfolge der Spieler anders sortieren, nämlich nach folgenden Prioritäten:
1. Punkte
2. DIREKTER VERGLEICH
3. Tordifferenz
4. Tore
Wie zu sehen ist, möchte ich, wenn zwei oder mehr Spieler in der Tabelle, die selbe Punktzahl erspielt haben, als nächstes Kriterium für die Findung der Reihenfolge den sogenannten "Direkten Vergleich" wählen. Für diejenigen unter uns, die davon noch nicht so viel gehört haben:
Der Direkte Vergleich bedeutet, dass die Reihenfolge der Spieler, die die selbe Punktzahl haben so festgelegt wird, das geschaut wird, wie stark diese Spieler relativ zueinander waren (quasi losgelöst von der restlichen Liga). Man kann sich das so vorstellen, als würde eine Extratabelle mit diesen Spielern erstellt werden, in die nur die Ergebnisse einfließen, die die Spieler gegeneinander erzielt haben. In dieser imaginären Extratabelle werden dann die Spieler nach folgender Priorität sortiert:
1. Punkte (die in den Spielen untereinander erzielt wurden)
2. Tordifferenz (die in den Spielen untereinander erzielt wurde)
3. Tore (die in den Spielen untereinander erzielt wurden)
Die daraus entstandene Reihenfolge der Spieler wird dann in die eigentliche Sporttabelle ALLER Spieler übernommen.
Somit hat man nach dem Prozedere eine Sporttabelle mit allen Spielern, in denen jeder einen eindeutigen Tabellenplatz hat bzw. es gibt eine eindeutige Reihenfolge der Spieler.
MEINE 2 PROBLEME sind, dass ich A nicht weiß, wie ich das im Code umsetze und B nicht weiß, wie ich das in den Code einbaue.
Damit ihr seht, wo ich aktuell stehe, hier der bisherige, für die Sporttabelle entscheidende Code-Ausschnitt (die Struktur stimmt mit meinem Code überein, ich habe ihn jedoch was Begrifflichkeiten angeht etwas "verallgemeinert"):
Der Rest des Codes ist Standard.
Wie muss ich das nun machen? Vom Gefühl her hätte ich gesagt, ich müsste an der entsprechenden Stelle des ORDER BY nochmals ein SELECT ausführen und dann eine Art Unter-Tabelle berechnen lassen nur aus den Spielern, die dann punktgleich sind...nur das ist leichter geschrieben als getan...Immerhin müsste ich dazu gezielt nur die Spieler auswählen können, die jeweils die selbe Punktzahl haben, wobei die Punktzahl ja variabel ist, da sie sich ja von Spieltag zu Spieltag verändern kann. Dann müsste unter diesen Teams eine Reihenfolge ermittelt werden wie zuvor beschrieben und diese Reihenfolge vom ORDER BY der Gesamttabelle der Liga auch angenommen werden. Ich habe hin und her überlegt, aber ich kriegs einfach nicht hin. Ich wäre echt froh, wenn mir jemand, der das drauf hat, zeigen kann, wie man das macht...ich hoffe, ich konnte verständlich alles darlegen.
Ich hoffe auf euch. Vielen Dank schon mal im Voraus, wenn ihr mir Input geben könnt!
ich bin gerade dabei für eine private Liga im Freundeskreis eine Tabelle zu erstellen. Diese wird mit Daten aus einer Datenbank gespeist. Dazu haben ich in der Datenbank 2 Tabellen angelegt:
- Spielerdaten (hier stehen alle relevanten Daten über die Spieler drin, u.a. Spielername und eine Spieler-ID, die der Spieler im Saisonverlauf besitzt)
- Spiele (hier stehen alle relevanten Daten über die einzelnen Spiele drin, u.a. Spieltag, Heimspieler-ID, Auswärtsspieler-ID, Tore usw.)
Um es kurz zu machen: Ich bin aktuell so weit, dass ich aus diesen Datenbank-Tabellen die entsprechenden Gesamtdaten jeder Spieler erreichen kann und damit auch eine Sport-Tabelle generieren kann. Soweit klappt alles gut.
Mein Problem ist allerdings, dass ich aktuell die Reihenfolge der Spieler in der Tabelle nur über Daten wie Punkte, Tordifferenz, Tore etc. erzeugen kann. Wäre das ok, wäre meine Tabelle bzw. der Code fertig. Jedoch möchte ich die Reihenfolge der Spieler anders sortieren, nämlich nach folgenden Prioritäten:
1. Punkte
2. DIREKTER VERGLEICH
3. Tordifferenz
4. Tore
Wie zu sehen ist, möchte ich, wenn zwei oder mehr Spieler in der Tabelle, die selbe Punktzahl erspielt haben, als nächstes Kriterium für die Findung der Reihenfolge den sogenannten "Direkten Vergleich" wählen. Für diejenigen unter uns, die davon noch nicht so viel gehört haben:
Der Direkte Vergleich bedeutet, dass die Reihenfolge der Spieler, die die selbe Punktzahl haben so festgelegt wird, das geschaut wird, wie stark diese Spieler relativ zueinander waren (quasi losgelöst von der restlichen Liga). Man kann sich das so vorstellen, als würde eine Extratabelle mit diesen Spielern erstellt werden, in die nur die Ergebnisse einfließen, die die Spieler gegeneinander erzielt haben. In dieser imaginären Extratabelle werden dann die Spieler nach folgender Priorität sortiert:
1. Punkte (die in den Spielen untereinander erzielt wurden)
2. Tordifferenz (die in den Spielen untereinander erzielt wurde)
3. Tore (die in den Spielen untereinander erzielt wurden)
Die daraus entstandene Reihenfolge der Spieler wird dann in die eigentliche Sporttabelle ALLER Spieler übernommen.
Somit hat man nach dem Prozedere eine Sporttabelle mit allen Spielern, in denen jeder einen eindeutigen Tabellenplatz hat bzw. es gibt eine eindeutige Reihenfolge der Spieler.
MEINE 2 PROBLEME sind, dass ich A nicht weiß, wie ich das im Code umsetze und B nicht weiß, wie ich das in den Code einbaue.
Damit ihr seht, wo ich aktuell stehe, hier der bisherige, für die Sporttabelle entscheidende Code-Ausschnitt (die Struktur stimmt mit meinem Code überein, ich habe ihn jedoch was Begrifflichkeiten angeht etwas "verallgemeinert"):
PHP-Code:
...
$Abfrage = "
SELECT
Tabellenwerte.Spieler,
Spielerdaten.Spieler_Name AS Spielername,
SUM(Tabellenwerte.Tore) AS sum_Tore,
SUM(Tabellenwerte.Gegentore) AS sum_Gegentore,
SUM(Tabellenwerte.Tordifferenz) AS sum_Tabellenwerte.Tordifferenz,
SUM(Tabellenwerte.Punkte) AS sum_Punkte
FROM
(
SELECT
Heimspieler_ID AS Spieler,
Heimspiel_Tore AS Tore,
Auswaertsspiel_Tore AS Gegentore,
Heimspiel_Tore - Auswaertsspiel_Tore AS Tordifferenz,
CASE
WHEN Heimspiel_Tore - Auswaertsspiel_Tore > 0
Then 3
ELSE 0
END AS Punkte,
WHEN Heimspiel_Tore - Auswaertsspiel_Tore = 0
Then 1
ELSE 0
END AS Punkte
FROM Spiele
WHERE
Saison = '2014' (um auf die Spiele der richtigen Saison zurückzugreifen)
AND
Spieltag <= '".$Spieltagsvariable."' (um auf die Spiele bis zu einem bestimmten Spieltag zurückzugreifen)
AND
Spiel_werten = 'y' (um nur auf Spiele zurückzugreifen, die für die Verwertung für die Sporttabelle freigegeben sind)
UNION ALL
SELECT
Auswaertsspieler_ID AS Spieler,
Auswaertsspiel_Tore AS Tore,
Heimspiel_Tore AS Gegentore,
Auswaertsspiel_Tore - Heimspiel_Tore AS Tordifferenz,
CASE
WHEN Auswaertsspiel_Tore - Heimspiel_Tore > 0
Then 3
ELSE 0
END AS Punkte,
WHEN Auswaertsspiel_Tore - Heimspiel_Tore = 0
Then 1
ELSE 0
END AS Punkte
FROM Spiele
WHERE
Saison = '2014' (um auf die Spiele der richtigen Saison zurückzugreifen)
AND
Spieltag <= '".$Spieltagsvariable."' (um auf die Spiele bis zu einem bestimmten Spieltag zurückzugreifen)
AND
Spiel_werten = 'y' (um nur auf Spiele zurückzugreifen, die für die Verwertung für die Sporttabelle freigegeben sind)
) AS Tabellenwerte JOIN Spielerdaten ON Tabellenwerte.Spieler = Spielerdaten.Spieler_ID
GROUP BY
Spielername
ORDER BY
sum_Punkte DESC, (sortiert in erster Priorität nach der Anzahl der Punkte jedes Spielers)
([COLOR="red"]HIER SOLL NUN DER DIREKTE VERGLEICH FOLGEN (wenn mehrere Spieler die gleiche Punkteanzahl haben -> Prioriät: 1. Punkte untereinander, 2. Tordifferenz untereinander, 3. Tore untereinander)[/COLOR]),
sum_Tordifferenz DESC, (sortiert, wenn der direkte Vergleich unentschieden ausgeht nach der Tordifferenz aus allen Spielen)
sum_Tore DESC (sortiert abschließend nach der Anzahl der geschossenen Tore
"
...
Der Rest des Codes ist Standard.
Wie muss ich das nun machen? Vom Gefühl her hätte ich gesagt, ich müsste an der entsprechenden Stelle des ORDER BY nochmals ein SELECT ausführen und dann eine Art Unter-Tabelle berechnen lassen nur aus den Spielern, die dann punktgleich sind...nur das ist leichter geschrieben als getan...Immerhin müsste ich dazu gezielt nur die Spieler auswählen können, die jeweils die selbe Punktzahl haben, wobei die Punktzahl ja variabel ist, da sie sich ja von Spieltag zu Spieltag verändern kann. Dann müsste unter diesen Teams eine Reihenfolge ermittelt werden wie zuvor beschrieben und diese Reihenfolge vom ORDER BY der Gesamttabelle der Liga auch angenommen werden. Ich habe hin und her überlegt, aber ich kriegs einfach nicht hin. Ich wäre echt froh, wenn mir jemand, der das drauf hat, zeigen kann, wie man das macht...ich hoffe, ich konnte verständlich alles darlegen.
Ich hoffe auf euch. Vielen Dank schon mal im Voraus, wenn ihr mir Input geben könnt!
Kommentar