Stefan: Select-Abfrage mit where

Moin zusammen,

ich hab mal wieder ein wahrscheinlich kleineres Problemchen:
Ich möchte aus einer Tabelle die ersten 3 zukünfitgen Datensätze haben.

Ich lese zunächst das aktuelle Datum und die Uhrzeit in Hilfsfelder, da in der Tabelle jeweile ein Feld für das Datum und die Uhrzeit ist.
 $date = date("Y-m-d");
 $time = date("H:i:s");

Und dann kommt der Select:
 select date, time, topic from table where date >= $date and time >= $time limit 0,3;

Ich bekomme dann folgende Meldung:
 You have an error in your SQL syntax near 'table where date >= 2004-03-31 and time >= 08:24:45 limit 0,3' at line 1

Könnte mir vielleicht wer auf die Sprünge helfen?

Stefan

  1. Halihallo Stefan

    Ich bekomme dann folgende Meldung:
     You have an error in your SQL syntax near 'table where date >= 2004-03-31 and time >= 08:24:45 limit 0,3' at line 1

    Könnte es sein, dass deine DB (MySQL wie ich aus LIMIT folgere?)
    Date als reserviertes Wort _reserviert_ hat?

    Nenne die Spalte um, oder verwende Backticks, welche ich nicht
    empfehle.

    Zudem Werten Datumswerte _immer_ gequotet, sprich: in
    Anführungszeichen gesetzt!

    Zudem musst du die Datensätze sortieren (ORDER BY), ansonsten erhälst
    du nicht die drei zukünftigsten Datensätze, sondern irgendwelche
    drei, die auf die WHERE-Klausel zutreffen.

    Viele Grüsse

    Philipp

    1. Hallo Philipp,

      Könnte es sein, dass deine DB (MySQL wie ich aus LIMIT folgere?) Date als reserviertes Wort _reserviert_ hat?

      Wie kann ich das denn erfahren?
      Auf jeden Fall hast Du mit der mySQL-DB recht.

      Nenne die Spalte um, oder verwende Backticks, welche ich nicht empfehle.

      Umbenennen ist nicht mehr so einfach machbar, mit Backticks meinst _...?

      Zudem Werten Datumswerte _immer_ gequotet, sprich: in
      Anführungszeichen gesetzt!

      Verstehe ich nicht wirklich :-(.

      Zudem musst du die Datensätze sortieren (ORDER BY), ansonsten erhälst du nicht die drei zukünftigsten Datensätze, sondern irgendwelche drei, die auf die WHERE-Klausel zutreffen.

      So schaut's dann nun aus, aber immer noch der selbe Fehler:
       select date as _date, time as _time, topic from table where date >= $date and time >= $time order by date asc limit 0,3;

      Stefan

      1. hi,

        Zudem Werten Datumswerte _immer_ gequotet, sprich: in
        Anführungszeichen gesetzt!

        Verstehe ich nicht wirklich :-(.

        ach gott, mal wieder gar keine ahnung ...

        table where date >= 2004-03-31 and time >= 08:24:45 limit 0,3

        was ist 2004-03-31 - soll das ein rechenausdruck sein, 2004 minus 3 minus 31?
        selbst wenn das für die DB wahrscheinlich noch machbar wäre(!), spätestens der ausdruck 08:24:45 ergibt gar keinen sinn mehr ...

        damit hingegen:
        table where date >= '2004-03-31' and time >= '08:24:45' limit 0,3
        sieht's doch schon ganz anders aus, damit hast du der DB mitgeteilt, dass das keine ausdrücke, sondern literale sein sollen, und schon versteht sie dich auch besser.

        gruss,
        wahsaga

        1. yo,

          ach gott, mal wieder gar keine ahnung ...

          hmm, gott hat keine ahnung, das wäre ein neuer ansatz, der einiges in dr geschichte der menschheit erklären könnte....

          Ilja

        2. Hallo,

          ach gott, mal wieder gar keine ahnung ...

          Sorry, aber wir arbeiten ja dran :-).

          damit hingegen:
          table where date >= '2004-03-31' and time >= '08:24:45' limit 0,3
          sieht's doch schon ganz anders aus, damit hast du der DB mitgeteilt, dass das keine ausdrücke, sondern literale sein sollen, und schon versteht sie dich auch besser.

          Du bist einfach nur genial *g*.
          Es klappt nun, fast *schnief*.

          select date as _date, time as _time, topic from table where date >= '$date' and time >= '$time' order by date, time asc limit 0,3;

          Nun bekomme ich die Sachen, von morgen z.B. angezeigt, aber erst ab 10:30 h, natürlich will ich aber auch den Datensatz bekommen, der morgen früh um 08:00 h ist.

          Stefan

          1. Ich bin ja so hohl *auf mich einschlag*. Warum nehme ich eigentlich die Zeit mit in die Bedingung *g*?

            select date as _date, time as _time, topic from table where date >= '$date' and time >= '$time' order by date, time asc limit 0,3;

            Danke, nun klappt alles schön *g*.

            Stefan

      2. Halihallo Stefan

        Könnte es sein, dass deine DB (MySQL wie ich aus LIMIT folgere?) Date als reserviertes Wort _reserviert_ hat?
        Wie kann ich das denn erfahren?

        http://www.mysql.com/doc/en/Reserved_words.html lesen und
        verstehen.

        Nenne die Spalte um, oder verwende Backticks, welche ich nicht empfehle.
        Umbenennen ist nicht mehr so einfach machbar, mit Backticks meinst _...?

        http://www.mysql.com/doc/en/Legal_names.html lesen und
        verstehen.

        Zudem Werten Datumswerte _immer_ gequotet, sprich: in
        Anführungszeichen gesetzt!

        Verstehe ich nicht wirklich :-(.

        http://www.mysql.com/doc/en/Date_and_time_types.html lesen
        und verstehen. wahsagas Posting lesen und verstehen.

        Zudem musst du die Datensätze sortieren (ORDER BY), ansonsten erhälst du nicht die drei zukünftigsten Datensätze, sondern irgendwelche drei, die auf die WHERE-Klausel zutreffen.
        So schaut's dann nun aus, aber immer noch der selbe Fehler:
         select date as _date, time as _time, topic from table where date >= $date and time >= $time order by date asc limit 0,3;

        Meine Postings lesen und verstehen.

        Grundsätzlich möchte ich dir noch folgendes empfehlen:
        Nicht gleich nachfragen, sondern die einschlägige Dokumentation lesen
        und verstehen.
        Vielleicht mal Google oder die Doku-Suchmaschinen zu einem Begriff
        befragen.

        :-)

        Viele Grüsse

        Philipp