Lucas: komplexes ORDER BY

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

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

    --
    sh:( fo:| ch:? rl:( br:> n4:( ie:% mo:) va:} de:> zu:) fl:| ss:| ls:[ js:|
  2. 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/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!
    Selfcode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
  3. 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

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

    1. DANKE!
      Genau das wars: ORDER BY IF(count_img > 1, 1 ,count_img), datum

      vielen dank!