Select willkürlich sortiert
basti_p
- datenbank
Hallo,
folgendes Problem: ich habe eine MySQL-Tabelle, u.a. gibt es eine Spalte "kategorie". In dieser stehen Werte wie "TOP", "Fortbildung", "Kultur" und andere.
Nun besteht der Wunsch, die Tabelle sortiert nach der Kategorie auszugeben - was ja kein Problem darstellt. Allerdings soll so sortiert werden, dass zuerst "TOP", dann "Fortbildung", dann "Kultur" und dann die anderen Kategorien kommen sollen.
Ist so etwas mit MySQL-Bordmitteln möglich (ohne mehrere Select-Statements zu verwenden, das wäre ja keine Kunst:-)
Vielen Dank und Grüße Basti
Hi!
Nun besteht der Wunsch, die Tabelle sortiert nach der Kategorie auszugeben - was ja kein Problem darstellt. Allerdings soll so sortiert werden, dass zuerst "TOP", dann "Fortbildung", dann "Kultur" und dann die anderen Kategorien kommen sollen.
Ist so etwas mit MySQL-Bordmitteln möglich (ohne mehrere Select-Statements zu verwenden, das wäre ja keine Kunst:-)
Jein. Füg eine Sortierspalte ein. Dann steckt die Sortierinformation in den Daten und kann durch dessen Pflege geändert werden.
Oder erstell diese Sortierspalte nur in der Ergebnismenge, indem du mit CASE den drei Werten eine Reihenfolge (1,2,3) gibst und dem Rest die 4. Anschließend nach dieser Spalte und dem Kategorienamen sortieren lassen. Das hat den Nachteil, dass die Sortierinformation im Code steckt.
Lo!
Hallo dedlfix,
Oder erstell diese Sortierspalte nur in der Ergebnismenge, indem du mit CASE den drei Werten eine Reihenfolge (1,2,3) gibst und dem Rest die 4. Anschließend nach dieser Spalte und dem Kategorienamen sortieren lassen. Das hat den Nachteil, dass die Sortierinformation im Code steckt.
vielen Dank, das hat geklappt:
SELECT news_date,
CASE news_category
WHEN 'TOP' THEN 1
WHEN 'Fortbildung' THEN 2
WHEN 'Kultur' THEN 3
ELSE 4 END AS reihenfolge
FROM _cms_modules_news_
ORDER BY reihenfolge ASC, news_date DESC
Grüße Basti
SELECT news_date FROM _cms_modules_news_ ORDER BY FIELD(news_category, 'TOP', 'Fortbieldung', 'Kultur'), news_date DESC
Wenn man Fortbildung richtig schreibt, funktioniert es noch besser... ^^
Ich würde es eher anders herum angeben, da FIELD bei nicht gefunden 0 zurückgibt.
ORDER BY FIELD(news_category, 'Kultur', 'Fortbildung', 'TOP') DESC, news_date DESC
Ich würde es eher anders herum angeben, da FIELD bei nicht gefunden 0 zurückgibt.
Wie man die Sortierung macht bleibt natürlich jedem selbst überlassen.