komplexes ORDER BY
Lucas
- datenbank
0 shn0 Marc Reichelt0 seppel0 Ilja0 Lucas
Ich habe folgendes Problem:
die Spalte "count_img" enthält einen Wert zwischen 0 bis 20.
Die Spalte "datum" ist DATETIME().
Nun möchte ich das ganze nach "datum" UND "count_img" sortieren.
Nun das Problem: Ich möchte in "count_img" alle Werte die größer sind als 1, als 1 behandeln.
Soll heißen: "count_img" soll nicht nach der Höhe der Zahlen sortiert werden, sondern nach Wahr bzw. Falsch, wobei Falsch gleich 0 und Wahr gleich >1 sein soll.
Zum Sinn der Sache: Die Datenbank enthält unter "count_img" eine Anzahl von Bildern die ein Fotoalbum bilden.
Nun möchte ich eine Übersicht aller existierenden Fotoalben nach "datum" sortiert ausgeben.
Das heißt: Ich brauche alle Datensätze, die min. 1 Foto enthalten, nach "datum" sortiert. Ich möchte jedoch NICHT nach der Anzahl der Bilder sortieren!
Die Problematik hierbei ist: Ich kann leider keinen Wahr-Falsch-Switch in die Datenbank einbauen, da diese aus einem IMPORT stammt und vom Eigentümer auch so wieder exportiertiert werden muss.
Für einen guten Tipp bin ich echt voll Dankbar
Grüße
Lucas
Servus,
Das heißt: Ich brauche alle Datensätze, die min. 1 Foto enthalten, nach "datum" sortiert. Ich möchte jedoch NICHT nach der Anzahl der Bilder sortieren!
Wie kommst du dann auf die Idee, nach count\_img
zu sortieren, wenn du garnicht danach sortieren willst?
...
WHERE count_img > 0
ORDER BY datum
Gruss
Patrick
Hallo Lucas,
Das heißt: Ich brauche alle Datensätze, die min. 1 Foto enthalten, nach "datum" sortiert. Ich möchte jedoch NICHT nach der Anzahl der Bilder sortieren!
Und wo ist das Problem?
[link:http://dev.mysql.com/doc/refman/5.1/de/select.html@title=SELECT] * FROM table WHERE count_img > 1 ORDER BY datum
Grüße
Marc Reichelt || http://www.marcreichelt.de/
hi,
wenn du die Einträge ohne Fotoalbum auch in der Ausgabe sehen willst gibt es mehrere Möglichkeiten:
select datum, count_img, 1
from T
where count_img > 0
union
select datum, count_img, 2
from T
where count_img = 0
order by 3,1
oder etwas eleganter:
select datum, count_img, case when count_img > 0 then 1 else 0 end
from T
order by 3
wenn du die Einträge ohne Fotoalbum nicht brauchst, nimm eine der anderen geposteten Varianten.
Gruss,
Seppel
yo,
Soll heißen: "count_img" soll nicht nach der Höhe der Zahlen sortiert werden, sondern nach Wahr bzw. Falsch, wobei Falsch gleich 0 und Wahr gleich >1 sein soll.
das ist recht einfach, indem du die flusssteuerung IF oder CASE benutzt. wenn der wert größer eins ist, dann 1, ansonsten den ursprünglichen wert.
SELECT spaltenausgabe....
FROM tabellen_name
WHERE bedingungen....
ORDER BY IF(count_img > 1, 1 ,count_img), datum
keine ahnung, ob mysql das in der order by klausel kann. wenn nicht, dann benutzt du eine pseudospalte in der SELECT klausel, der du einen aliasnamen gibst und sortierst dann danach.
Ilja
DANKE!
Genau das wars: ORDER BY IF(count_img > 1, 1 ,count_img), datum
vielen dank!