combo: Nächstes Datum ausgeben

Hallo,

lasse mir über folgenden Befehl das nächstliegende Datum aus einer MySQL-Datenbank ausgeben:

$abfrage = "SELECT * FROM $tabelle WHERE UNIX_TIMESTAMP(datum_sort)>UNIX_TIMESTAMP(curdate()) LIMIT 0,1";

Das Feld 'datum_sort' hat folgenden Inhalt:
2002-02-09
2002-05-11
2002-06-01

Leider funktioniert das nicht richtig, denn es wird nicht das Datum
2002-05-11, sondern das Datum 2002-06-01 als nächstliegendes Datum angegeben.
Hat das eventuell irgendwas mit UNIX_TIMESTAMP(datum_sort) zu tun? Erwartet UNIX_TIMESTAMP ein anderes Datumformat?
Welchen Befehl muss ich verwenden, damit mein Datumformat YYYY-MM-DD richtig verwendet wird?
Das ganze könnt Ihr Euch unter http://www.combo-speciale.de anschauen, unter Termine steht die ganze Datenbank und rechts in der Box immer das nächstfolgende Datum.

Vielen Dank für die Hilfe,

Combo

  1. Bongú!

    lasse mir über folgenden Befehl das nächstliegende Datum aus einer MySQL-Datenbank ausgeben:

    $abfrage = "SELECT * FROM $tabelle WHERE UNIX_TIMESTAMP(datum_sort)>UNIX_TIMESTAMP(curdate()) LIMIT 0,1";

    Das Feld 'datum_sort' hat folgenden Inhalt:
    2002-02-09
    2002-05-11
    2002-06-01

    Leider funktioniert das nicht richtig, denn es wird nicht das Datum
    2002-05-11, sondern das Datum 2002-06-01 als nächstliegendes Datum angegeben.
    Hat das eventuell irgendwas mit UNIX_TIMESTAMP(datum_sort) zu tun? Erwartet UNIX_TIMESTAMP ein anderes Datumformat?

    Lass dir doch die beiden Zeitstempel im Select-Teil anzeigen, dann siehst du ja, was verglichen wird. ;-)

    Dein Problem dürfte eine ganz andere Ursache haben:

    Es fehlt das ORDER BY.

    Ohne die Ausgabe nach dem Datumsfeld zu sortieren, hast du auf die Reihenfolge, in der die Datensätze zurückgeliefert werden, nicht den geringsten Einfluss.

    Folgendes sollte das gewünschte Ergebnis liefern:

    SELECT *
     FROM $tabelle
     ORDER BY datum_sort ASC
     WHERE UNIX_TIMESTAMP(datum_sort)>UNIX_TIMESTAMP(curdate())
     LIMIT 0,1;

    Sahha,

    kerki

    1. Hallo,

      Lass dir doch die beiden Zeitstempel im Select-Teil anzeigen, dann siehst du ja, was verglichen wird. ;-)

      wie denn? ;-)

      Dein Problem dürfte eine ganz andere Ursache haben:

      Es fehlt das ORDER BY.

      Ohne die Ausgabe nach dem Datumsfeld zu sortieren, hast du auf die Reihenfolge, in der die Datensätze zurückgeliefert werden, nicht den geringsten Einfluss.

      Folgendes sollte das gewünschte Ergebnis liefern:

      SELECT *
      FROM $tabelle
      ORDER BY datum_sort ASC
      WHERE UNIX_TIMESTAMP(datum_sort)>UNIX_TIMESTAMP(curdate())
      LIMIT 0,1;

      Leider funktioniert das dann überhaupt nicht mehr! :-(

      Hast Du eventuell noch ne andere Idee?

      MfG, Combo

      1. Hallo,

        SELECT *
        FROM $tabelle
        ORDER BY datum_sort ASC
        WHERE UNIX_TIMESTAMP(datum_sort)>UNIX_TIMESTAMP(curdate())
        LIMIT 0,1;

        Leider funktioniert das dann überhaupt nicht mehr! :-(

        Hast Du eventuell noch ne andere Idee?

        Ja, schreib das Statement richtig, denn oft kommt es einfahc nur auf die richtige Reigenfolge an:

        SELECT *
           FROM $tabelle
           WHERE UNIX_TIMESTAMP(datum_sort)>UNIX_TIMESTAMP(curdate())
           ORDER BY datum_sort ASC
           LIMIT 0,1;

        Ja ja, die 'Sündachs', das ist so eine Sache;-)

        'Literaturhinweise':
        http://www.mysql.com/doc/S/E/SELECT.html

        Grüße
          Klaus

        1. Bongú!

          Ja ja, die 'Sündachs', das ist so eine Sache;-)

          Wenn ich schon 'mal aus dem Gedächtnis zitiere. %-[

          Sind 10 "Vater unser" genug zur Buße?

          </faq/#Q-09d> Du sollst keine ungetesteten Sachen posten!
          </faq/#Q-09d> Du sollst keine ungetesteten Sachen posten!
          </faq/#Q-09d> Du sollst keine ungetesteten Sachen posten!
          </faq/#Q-09d> Du sollst keine ungetesteten Sachen posten!
          </faq/#Q-09d> Du sollst keine ungetesteten Sachen posten!
          </faq/#Q-09d> Du sollst keine ungetesteten Sachen posten!
          </faq/#Q-09d> Du sollst keine ungetesteten Sachen posten!
          </faq/#Q-09d> Du sollst keine ungetesteten Sachen posten!
          </faq/#Q-09d> Du sollst keine ungetesteten Sachen posten!
          </faq/#Q-09d> Du sollst keine ungetesteten Sachen posten!

          In diesem Sinne...

          Sahha!

          kerki

          1. Hallo,

            Ja ja, die 'Sündachs', das ist so eine Sache;-)

            Wenn ich schon 'mal aus dem Gedächtnis zitiere. %-[

            Na ja, kann locker mal passieren, aber eigentlich wollet ich ja combo darauf hinweisen, daß es auch anderswo Dokumente gibt in denen man nachlesen kann, wie mySQl funktioniert, und warum etwas nicht funktionieren kann. 'Self ist der Mensch' sollte es eigentlich heißen.

            Grüße
              Klaus