Trüffelkrieger
Mitglied
Hallo,
ich habe eine Ausgabe mehrere Ergebnisse, die primär nach der festgelegten Reihenfolge der Disziplinen sortiert werden. Bei gleichen Disziplinen möchte ich so sortieren lassen, dass die besten werte oben stehen, also bei Laufdisziplinen der kleinste Wert, bei Sprungdisziplinen und Wurfdisziplinen der größte Wert...
Meine Abfrage sieht bis jetzt so aus:
Nun bekomme ich alle Ergebnisse der Männlichen Jugend U20 aus dem Jahr 2012 in der gewünschten Reihenfolge der Disziplinen geliefert. Bei den Laufdisziplinen klappt auch die aufsteigende Sortierung der Ergebnisse bei mehreren Ergebnissen in der gleichen Disziplin.
Allerdings werden natürlich auch die Sprung/Wurf-Ergebnisse aufsteigend sortiert, was ich aber genau andersherum haben möchte.
Nun gibt es ja eine CASE Anweisung, die man - soweit ich weiß - theoretisch auch in dem ORDER BY Teil nutzen kann. Da alle Ergebnisse der Wurf/Sprung Disziplinen auf ein "m" enden (für Meter), habe ich mir folgendes überlegt:
Theoretisch dachte ich so erreichen zu können, dass er immer die Reihenfolge beachtet, die in der Tabelle disziplinen abgelegt sind, und dann prüft ob am Ende ein m oder halt kein m vorkommt...
Aber sortiert ist in der Ausgabe nichts, weder nach der Reihenfolge, noch nach irgendwelchen Ergebnisendungen...
Wie kann ich also beschreiben, dass er immer nach der festgelegten Reihenfolge sortiert und dann noch nach dem Parameter m oder kein m? (Und dann jeweils die Sortierrichtung umdreht)
ich habe eine Ausgabe mehrere Ergebnisse, die primär nach der festgelegten Reihenfolge der Disziplinen sortiert werden. Bei gleichen Disziplinen möchte ich so sortieren lassen, dass die besten werte oben stehen, also bei Laufdisziplinen der kleinste Wert, bei Sprungdisziplinen und Wurfdisziplinen der größte Wert...
Meine Abfrage sieht bis jetzt so aus:
PHP:
SELECT DISTINCT *
FROM ergebnisse
JOIN athleten ON ergebnisse.skuerzel = athleten.skuerzel
JOIN athleten1 ON ergebnisse.skuerzel1 = athleten1.skuerzel1
JOIN athleten2 ON ergebnisse.skuerzel2 = athleten2.skuerzel2
JOIN athleten3 ON ergebnisse.skuerzel3 = athleten3.skuerzel3
JOIN athleten4 ON ergebnisse.skuerzel4 = athleten4.skuerzel4
JOIN disziplinen ON ergebnisse.dkuerzel = disziplinen.dkuerzel
JOIN altersklassen ON ergebnisse.akuerzel = altersklassen.akuerzel
WHERE ergebnisse.akuerzel = 'mju20'
AND jahr =12
ORDER BY disziplinen.reihenfolge, ergebnis ASC
Nun bekomme ich alle Ergebnisse der Männlichen Jugend U20 aus dem Jahr 2012 in der gewünschten Reihenfolge der Disziplinen geliefert. Bei den Laufdisziplinen klappt auch die aufsteigende Sortierung der Ergebnisse bei mehreren Ergebnissen in der gleichen Disziplin.
Allerdings werden natürlich auch die Sprung/Wurf-Ergebnisse aufsteigend sortiert, was ich aber genau andersherum haben möchte.
Nun gibt es ja eine CASE Anweisung, die man - soweit ich weiß - theoretisch auch in dem ORDER BY Teil nutzen kann. Da alle Ergebnisse der Wurf/Sprung Disziplinen auf ein "m" enden (für Meter), habe ich mir folgendes überlegt:
PHP:
ORDER BY
CASE WHEN 'ergebnis'!='' THEN 'disziplinen.reihenfolge ASC'
WHEN 'ergebnis'!='%m' THEN 'ergebnis ASC'
WHEN ergebnis= '%m' THEN 'ergebnis DESC' END
Theoretisch dachte ich so erreichen zu können, dass er immer die Reihenfolge beachtet, die in der Tabelle disziplinen abgelegt sind, und dann prüft ob am Ende ein m oder halt kein m vorkommt...
Aber sortiert ist in der Ausgabe nichts, weder nach der Reihenfolge, noch nach irgendwelchen Ergebnisendungen...
Wie kann ich also beschreiben, dass er immer nach der festgelegten Reihenfolge sortiert und dann noch nach dem Parameter m oder kein m? (Und dann jeweils die Sortierrichtung umdreht)