ORDER BY und CASE MySQL 

Bastifantasti

Stammuser
Registriert
Mai 2006
Beiträge
115
Ich habe eine Datenbank mit einer Tabelle, die (vereinfacht) in etwa so aussieht:
(Es sind viel viel mehr Zeilen und auch noch mehrere Spalten, aber das sind die Spalten, auf die es ankommt. Einträge sind nur Beispiele)

unsortert.webp


Diese Tabelle soll sortiert werden, sodass sie wie folgt aussieht:

sortiert.webp

Also: Zunächst soll nach serie alphabetisch sortiert werden. Anschließend nach typ alphabetisch und anschließend - und hier kommt mein Problem - soll unterschieden werden.
Die Zeilen, wo typ = "vid" ist, sollen alphabetisch nach format alphabetisch sortiert werden, die Zeilen wo typ = "aud" ist, sollen nach der Anzahl sortiert werden, wie oft ein Format vorkommt und das absteigend.

Ich hoffe, es ist klar geworden, was ich vorhabe.

Ich bekomme es jedenfalls einfach nicht hin.
Ich habe es schon mit CASE versucht, aber es kommt nichts dabei heraus:

SQL:
SELECT serie, format, typ FROM tabelle GROUP BY serie, format ORDER BY serie, typ, CASE WHEN typ = 'aud' THEN COUNT(format) ELSE format END
Vielleicht kann mir hier ja jemand Schlaues helfen.
Das wäre sehr lieb. :)
 
Hallo Bastifantasti,
ich sehe da keine Möglichkeit, das in einer Abfrage zu erledigen.

Du hast folgende Möglichkeiten,
entweder du machst eine Abfrage

select * from tabelle order by serie, typ, format

und gehst die Ergebnisse im php dann als Array durch, Zählst die Einträge in format und sortierst die Reihenfolge entsprechend in ein neues Array

oder du führst eine weitere Spalte mit einem Sortierungswert `rang`(int) ein, dann kannst du mit

select * from tabelle order by serie, typ, format, rang

die richtige Reihenfolge abrufen, musst aber den Wert für rang immer mitsetzen beim einfügen in die Tbl.

Schöne Grüße
Tom
 
Zurück
Oben Unten