ORDER BY und CASE

  • MySQL

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ORDER BY und CASE

    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)




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



    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-Abfrage

    1. 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