"Position" im MySQL Abfrageergebnis
am 28.07.2006 23:36:42 von Mirko HaaserHallo zusammen,
ich habe folgendes Problem bei einer SQL Abfrage:
Für eine Hockey-Vereinsseite habe ich eine Abfrage [1], die aus
erfassten Begegnungen, Spielern, Spieltagen und Saisons eine aktuelle
Tabelle für die Saison ermittelt. Dabei wird die Reihenfolge der Spieler
per GROUP BY gebildet und die Position in der Saisontabelle durch die
Reihenfolge im Resultset bestimmt.
Dieses Ergebnis möchte ich als SUB-SELECT jetzt gerne weiterverarbeiten
(die Bewegung eines Spielers in der Tabelle während einer Saison).
Bisher habe ich die Position per Zählervariable in einer
while ($row = mysql_fetch_array)
{
echo "Platz: ".$i++;
}
Schleife abgefragt.
Gibt es eine Funktion in MySQL, die mir die aktuelle Position in einem
Resultset liefert?
Einfacheres Beispiel:
Tabelle mit Spalte id und den Einträgen id = 1, id = 4, id = 10
SELECT id FROM Tabelle ORDER BY id ASC
gibt:
1
4
10
Ich möchte jetzt ein Ergebnis in der Form:
SELECT [MEINE GESUCHTE FUNKTION], id FROM Tabelle ORDER by id ASC
1 1
2 4
3 10
Wie bekomme ich die erste Zahl?!?
Ich hoffe, ich konnte mich verständlich ausdrücken...
Viele Grüße,
Mirko
[1] Hier die bisherige Abfrage:
SELECT saison.name AS Saison,
spieler.spielername AS Name,
spieler.id AS Id,
SUM((CASE
WHEN spiel.punkte_rot > spiel.punkte_weiss AND x.mannschaft = 'rot' THEN 2
WHEN spiel.punkte_rot < spiel.punkte_weiss AND x.mannschaft = 'weiss' THEN 2
WHEN spiel.punkte_rot = spiel.punkte_weiss THEN 1
ELSE 0
END)) As Punkte_Po,
SUM((CASE
WHEN spiel.punkte_rot > spiel.punkte_weiss AND x.mannschaft = 'rot' THEN 0
WHEN spiel.punkte_rot < spiel.punkte_weiss AND x.mannschaft = 'weiss' THEN 0
WHEN spiel.punkte_rot = spiel.punkte_weiss THEN 0
ELSE 2
END)) As Punkte_Ne,
SUM((CASE
WHEN spiel.punkte_rot > spiel.punkte_weiss AND x.mannschaft = 'rot' THEN 2
WHEN spiel.punkte_rot < spiel.punkte_weiss AND x.mannschaft = 'weiss' THEN 2
WHEN spiel.punkte_rot = spiel.punkte_weiss THEN 1
ELSE -2
END)) As Punkte_Ges,
SUM((CASE
WHEN spiel.punkte_rot > spiel.punkte_weiss AND x.mannschaft = 'rot' THEN
spiel.punkte_rot
WHEN spiel.punkte_rot < spiel.punkte_weiss AND x.mannschaft = 'weiss'
THEN spiel.punkte_weiss
WHEN spiel.punkte_rot = spiel.punkte_weiss THEN spiel.punkte_rot
ELSE 0
END)) As Tore_Po,
SUM((CASE
WHEN spiel.punkte_rot > spiel.punkte_weiss AND x.mannschaft = 'rot' THEN
spiel.punkte_weiss
WHEN spiel.punkte_rot < spiel.punkte_weiss AND x.mannschaft = 'weiss'
THEN spiel.punkte_rot
WHEN spiel.punkte_rot = spiel.punkte_weiss THEN spiel.punkte_rot
ELSE 0
END)) As Tore_Ne,
SUM((CASE
WHEN spiel.punkte_rot > spiel.punkte_weiss AND x.mannschaft = 'rot' THEN
spiel.punkte_rot - spiel.punkte_weiss
WHEN spiel.punkte_rot > spiel.punkte_weiss AND x.mannschaft = 'weiss'
THEN spiel.punkte_weiss - spiel.punkte_rot
WHEN spiel.punkte_rot < spiel.punkte_weiss AND x.mannschaft = 'rot' THEN
spiel.punkte_rot - spiel.punkte_weiss
WHEN spiel.punkte_rot < spiel.punkte_weiss AND x.mannschaft = 'weiss'
THEN spiel.punkte_weiss - spiel.punkte_rot
WHEN spiel.punkte_rot = spiel.punkte_weiss THEN 0
END)) As Tore_Ges,
COUNT(spiel.id) AS Spiele
FROM hockey_spieler AS spieler
JOIN hockey_x_spieler_spiel AS x ON x.spieler_id = spieler.id
JOIN hockey_spiel AS spiel ON spiel.id = x.spiel_id
JOIN hockey_spieltag AS tag ON tag.id = spiel.spieltag_id
JOIN hockey_saison AS saison ON saison.id = tag.saison_id
WHERE saison.id = 5
GROUP BY Saison, Name
ORDER BY Punkte_Po DESC, Tore_Po DESC, Tore_Ne DESC