Onkel Schnitzel: Problem mit Sortierung nach Datum und Uhrzeit

Hallo,

mein Gästebuch sortiert die Einträge nicht richtig. Es wird zwar korrekt absteigend nach dem Datum sortiert, aber bei der Uhrzeit gehts lustigerweise anders herum. So steht ein Eintrag vom "11.04.05 11:00 Uhr" zwar über dem "10.04.05 11:00 Uhr" aber unter dem "11.04.05 10 Uhr". Ich hab das Archiv durchsucht, aber nichts dazu gefunden. Das Datumfeld ist ein TIMESTAMP. So sieht meine sql-Abfrage aus:

$sql2 = "SELECT
                     ID,
                        name,
                        ort,
                        mail,
                        DATE_FORMAT(datum, '%d.%m.%y') AS Datum,
                        DATE_FORMAT(datum, '%k:%i') As Zeit,
                        DATE_FORMAT(datum, '%w') As tag_ind,
                        text
                    FROM
                        gaestebuch
                    ORDER BY
                        datum DESC
                    LIMIT
                        $start2, $gb_liste";

Grüße,
Onkel Schnitzel

  1. hi...bin mir nicht sicher..aber es könnte sein, dass es probleme mit "Datum" und "datum" gibt.

    bennene doch einmal das formatierte "Datum" zb. "formdate"

    ev. bringts ja was

    1. hi...bin mir nicht sicher..aber es könnte sein, dass es probleme mit "Datum" und "datum" gibt.

      naja, mein TIMESTAMP-Feld heißt ja nunmal 'datum'. Und wenn ich nach 'datum' sortiere, müßte das eigentlich richtig sein. Ich habs trotzdem  mit Deinem Tip versucht, hat leider nicht geklappt. Trotzdem Danke, ich werd nochmal rumprobieren.

      Gruß,
      Onkel Schnitzel

      1. ja ich dachte auch nicht dass du deine spalte umbenennen sollst, sondern deine formatierung :-)

        deine spalte heisst "datum"
        die Formatierung heisst "Datum"
        und bei "Datum" hast du ja die zeit nicht mehr dabei...ich dachte ev. greifft dann sql auf das "Datum" anstelle der spalte "datum" zurück. aber wie es scheint, ist dem nicht so...tja war ein versuch wert.

        1. deine spalte heisst "datum"
          die Formatierung heisst "Datum"

          Ja, aber eigentlich unterscheidet PHP doch zwischen Groß-und Kleinschreibung.

          Lustigerweise funktioniert die Sortierung auf einmal wieder richtig, obwohl das Script immer noch das Gleiche ist. Sollte der Fehler nochmal auftauchen, werde ichs vielleicht doch nochmal mit einem anderen Namen versuchen.

          Beste Grüße,
          Onkel Schnitzel

          1. Ja, aber eigentlich unterscheidet PHP doch zwischen Groß-und Kleinschreibung.

            bloß dass das kein PHP-Code ist, sondern SQL.

            Es wird bei deiner SQL-Abfrage ja auch nur nach dem
            Datum sortiert. Füge die Zeit noch dran, dann geht's.

            ORDER BY
                Datum DESC, Zeit DESC

  2. Wie wäre es, wenn du das Timestamp-Datum erst danach formatierst?

    $sql2 = "SELECT
                 ID,
                 name,
                 ort,
                 mail,
                 datum,
                 text
               FROM
                 gaestebuch
               ORDER BY
                 datum DESC
               LIMIT
                 $start2, $gb_liste";

    echo DATE_FORMAT(datum, '%d.%m.%y').
           DATE_FORMAT(datum, '%k:%i').
           DATE_FORMAT(datum, '%w');

    1. Ächm...

      Die Formatierung muss dann natürlich mit PHP-Funktionen

      http://www.php.net/manual/de/function.date.php

      erfolgen und nicht mit DATE_FORMAT.

      1. http://www.php.net/manual/de/function.date.php

        erfolgen und nicht mit DATE_FORMAT.

        ich wollte es eigentlich schon direkt mit der mysql-Funktion machen. Aber danke für den Link, wenn alle Stricke reißen, werde ich darauf zurückkommen.

        gruß,
        Onkel Schnitzel

  3. $sql2 = "SELECT
                         ID,
                            name,
                            ort,
                            mail,
                            DATE_FORMAT(datum, '%d.%m.%y') AS Datum,
                            DATE_FORMAT(datum, '%k:%i') As Zeit,
                            DATE_FORMAT(datum, '%w') As tag_ind,
                            text
                        FROM
                            gaestebuch
                        ORDER BY
                            datum DESC
                        LIMIT
                            $start2, $gb_liste";

    Ich behelf mir in solchen Fällen mit einem Hilfsfeld, da du so nach dem Formatierten Datum sortierst und das geht schief.

    SELECT ID, name, ort, mail,
    DATE_FORMAT(datum, '%d.%m.%y') AS datum_f,
    DATE_FORMAT(datum, '%k:%i') As Zeit,
    DATE_FORMAT(datum, '%w') As tag_ind,
    text
    FROM gaestebuch ORDER BY datum DESC

    Struppi.