FrankS: MySQL Frage: Sortierung von 2 Spalten

Hallo zusammen,

ich möchte gern in einer Datenbankabfrage nach 2 Spalten sortieren. Es handelt sich dabei um die Spalten "datum_eintrag" und "datum_update". Wobei in "datum_update" nur ein Datum drin steht, wenn ein Update vorgenommen wurde.

Ich hätte gern, die Aktuellste Zeile nach oben sortiert. Ich bekomme aber irgendwie keine gescheite Kombination von "order by" mit "datum_update desc" und "datum_eintrag desc" hin.
Ich nehme an es liegt an den teilweise leeren "datum_update" Feldern.

Habt ihr vielleicht einen Tipp für mich, wie ich das lösen könnte?

VG Frank

  1. hallo,

    Ich bekomme aber irgendwie keine gescheite Kombination von "order by" mit "datum_update desc" und "datum_eintrag desc" hin.

    haste schon ORDER BY datum_update, datum_eintrag DESC probiert?

    grüße,
    henman

    --
    "Sir! We are surrounded!" - "Excellent! We can attack in any direction!"
    1. Hallo Henman!

      haste schon ORDER BY datum_update, datum_eintrag DESC probiert?

      Bei "Order by datum_eintrag desc, datum_update desc"
      steht das aktuellste lt. "datum_eintrag" ganz oben, aktuelle "datum_update" stehen ganz wo anders. (Wahrscheinlich sind dabei die leeren Felder die aktuellsten)

      Bei "Order by datum_update desc, datum_eintrag desc"
      stehen erst die Einträge mit update und danach die aktuellsten "datum_eintrag" mit "datum_update" NULL.

      VG Frank

  2. moin,

    Ich hätte gern, die Aktuellste Zeile nach oben sortiert. Ich bekomme aber irgendwie keine gescheite Kombination von "order by" mit "datum_update desc" und "datum_eintrag desc" hin.

    wenn ich dich richtig verstanden habe, dann suchst du eigentlich die sortierung nach einer virtuellen spalte, die sich aus deinen zwei spalten zusammen setzt. ist die update spalte nicht NULL, dann nehme den wert, ansonsten nimm das eintragsdatum. du bauchst also eine kleine logik in deiner sortierung, CASE kann man dafür immer verwenden, aber auch andere nützliche funktionen wie IFNULL. das würde dann zum beispiel so aussehen:

    ORDER BY IFNULL(datum_update, datum_eintrag)

    Ilja

  3. Hi!

    Ich hätte gern, die Aktuellste Zeile nach oben sortiert. Ich bekomme aber irgendwie keine gescheite Kombination von "order by" mit "datum_update desc" und "datum_eintrag desc" hin.
    Ich nehme an es liegt an den teilweise leeren "datum_update" Feldern.

    Sowohl das Default-Datum '0000-00-00' als auch NULL sind kleiner als alle anderen Datumsangaben, werden also bei einem DESC nach hinten sortiert. Wenn du allerdings kein Datum sondern beispielsweise einen String gespeichert hast, kann das Ergebnis anders aussehen.

    Wenn du allerdings die Daten des Eintrags und des Updates gemischt betrachten willst, kannst du das mit zwei vereinigten Abfragen erreichen

    (SELECT datum_update datum, ... WHERE datum_update <> deine_definition_von_leer)
      UNION
      (SELECT datum_eintrag datum, ... WHERE datum_update == deine_definition_von_leer)
      ORDER BY datum DESC

    Das bringt die beiden Daten in eine Spalte, nach der dann sortiert werden kann.

    Statt der zwei Abfragen kannst du auch versuchen, eine Formel zu erstellen, die datum_update oder datum_eintrag zurückgibt. Wenn ein leeres Datum durch einen NULL-Wert repräsentiert wird, dann kannst du nach

    COALESCE(datum_update, datum_eintrag)

    sortieren lassen. COALESCE liefert den ersten Nicht-NULL-Wert.

    Lo!

    1. Hallo,

      COALESCE(datum_update, datum_eintrag)

      das war die Lösung. Die leeren Felder sind NULL, somit ist
      " Order by COALESCE(datum_update, datum_eintrag) DESC"
      meine Lösung.

      Vielen Dank an alle!

      VG Frank