Bummsi: Zeitabfrage in php/mySQL

Hallo,

ich benutze eine MySQL-DB und habe folgende Abfrage in php:

  
$sql = "SELECT *  
FROM  
tv ORDER BY datum ASC LIMIT 1 WHERE datum = now()";  

Da das Datum aber keinen Zeitraum, sondern einen Zeitpunkt ausgibt, wäre die Ausgabe ja wirklich nur just in dem Moment zu sehen, in dem Zeitpunkt und Abfrage identisch wären. Jetzt meine Frage:

Kann ich WHERE datum = now()";
so modifizieren, dass die Abfrage ab dem eingetragenen Zeitpunkt plus die nächste Stunde angezeigt wird?

Danke schön!

  1. so modifizieren, dass die Abfrage ab dem eingetragenen Zeitpunkt plus die nächste Stunde angezeigt wird?

    logisch:

    großer jetzt UND kleiner jetzt + 1 stunde

    praktisch:

    das schaffst du sicher allein.

  2. Hallo,

    ich benutze eine MySQL-DB und habe folgende Abfrage in php:

    $sql = "SELECT *
    FROM
    tv ORDER BY datum ASC LIMIT 1 WHERE datum = now()";

      
    
    > Kann ich WHERE datum = now()";  
    > so modifizieren, dass die Abfrage ab dem eingetragenen Zeitpunkt plus die nächste Stunde angezeigt wird?  
      
    [ZWISCHEN](http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between) jetzt UND [jetzt + 1 Stunde](http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-add)  
      
      
    Freundliche Grüße  
      
    Vinzenz
    
    1. Ich muss dazu sagen, dass ich auf dem Gebiet noch ein Frischling bin.

      Ich habe mir das so gedacht ...

        
      mysql_query("SELECT from tv WHERE datum BETWEEN now() AND INTERVAL 1 HOUR") OR die(mysql_error());  
      
      

      das ist aber offensichtlich nicht richtig. Ist das falsch gedacht oder falsch gemacht (oder beides?)

      Gruß

      1. Hallo,

        Ich muss dazu sagen, dass ich auf dem Gebiet noch ein Frischling bin.

        das ist nicht schlimm. Jeder war das mal - auch wenn's manche später nicht mehr wahrhaben wollen.

        mysql_query("SELECT from tv WHERE datum BETWEEN now() AND INTERVAL 1 HOUR") OR die(mysql_error());

          
        
        > das ist aber offensichtlich nicht richtig. Ist das falsch gedacht oder falsch gemacht (oder beides?)  
          
        Es ist eine gute Idee, beim Erlernen einer neuen Technik sich nach Möglichkeit nicht mit weiteren Techniken herumschlagen zu müssen. Beim Erlernen von SQL und Durchtesten von SQL-Statements ist es am besten, wenn man sich das in einem SQL-Client wie dem MySQL-Query-Browser (oder seinem Nachfolger) oder gern auch in phpMyAdmin anschaut:  
          
        ~~~sql
        SELECT  
            NOW()  
        
        

        liefert den aktuellen Zeitpunkt

        SELECT  
            NOW() + INTERVAL 1 HOUR
        

        liefert den Zeitpunkt, der von jetzt an in einer Stunde liegt. Du könntest auch weniger intuitiv

        SELECT  
            DATE_ADD(NOW(), INTERVAL 1 HOUR)
        

        schreiben.

        SELECT NOW() BETWEEN NOW( ) AND INTERVAL 1 HOUR

        produziert dagegen einen SQL-Syntaxfehler. SQL weiß nichts davon, dass Du die Zeitspanne auf den Wert zwischen BETWEEN und AND draufaddieren möchtest. Du musst es schon explizit sagen, worauf ich Dich mit

        ZWISCHEN jetzt UND jetzt + 1 Stunde

        hinweisen wollte:

        SELECT  
            NOW( ) AS jetzt,  
            NOW( ) +  INTERVAL 1 HOUR AS `in einer Stunde` ,  
            NOW( ) BETWEEN NOW( ) AND NOW( ) + INTERVAL 1 HOUR AS Test
        

        gibt mir (im Augenblick der Ausführung) folgendes Ergebnis:

        jetzt                 in einer Stunde Test
        -----------------------------------------------------
        2010-02-10 19:34:42 2010-02-10 20:34:42 1

        Du siehst: der Zeitpunkt der "jetzt" ist liegt zwischen dem "jetztigen" Zeitpunkt und dem in einer Stunde.

        Bis auf das fehlende "NOW() +" hinter AND war's schon richtig. MySQL wird Dir dennoch einen Fehler um die Ohren hauen, bis Du die Syntax korrekt hinbekommst.

        Noch ein Hinweis zum Schluss: die() ist keine Fehlerbehandlung.

        Freundliche Grüße

        Vinzenz

        1. Hello Vinzenz,

          wie ist das eigentlich, wenn man innerhalb eines Querys zweimal now() aufruft. Ist das dann immer dieselbe Zeit oder könnte es auch ein Differenz geben?

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hi!

            wie ist das eigentlich, wenn man innerhalb eines Querys zweimal now() aufruft. Ist das dann immer dieselbe Zeit oder könnte es auch ein Differenz geben?

            Das wird wohl so gehandhabt sein, wie es das Handbuch beschreibt. Willst du es NOW() lesen oder in einer Stunde? :-)

            Lo!

            1. Hello,

              wie ist das eigentlich, wenn man innerhalb eines Querys zweimal now() aufruft. Ist das dann immer dieselbe Zeit oder könnte es auch ein Differenz geben?

              Das wird wohl so gehandhabt sein, wie es das Handbuch beschreibt. Willst du es NOW() lesen oder in einer Stunde? :-)

              Jau danke. Lieber now().
              Sonst verwechsle ich das wieder mit sysdate()...

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
          2. Hallo Tom,

            wie ist das eigentlich, wenn man innerhalb eines Querys zweimal now() aufruft. Ist das dann immer dieselbe Zeit

            ja: den Zeitpunkt des Beginns der Ausführung des Statements (der Stored Procedured, des Triggers ...)

            oder könnte es auch ein Differenz geben?

            Nein. Möchtest Du den exakten Zeitpunkt haben, wann die Funktion ausgeführt wird, so nimm SYSDATE (MySQL 5.0.12 und neuer).

            Freundliche Grüße

            Vinzenz

            1. Danke noch mal für die Hilfe!

              Ehrlich gesagt habe ich aber keine Ahnung, wo der Fehler im Syntax liegt. Vielleicht sehe ich aber auch den Wald vor lauter Bäumen nicht. Das hier ist jetzt meine "Lösung" ...

                
              mysql_query("SELECT from tv WHERE datum BETWEEN NOW( ) AND NOW( ) + INTERVAL 1 HOUR") OR die(mysql_error());  
              
              

              Könntet Ihr mir bitte noch mal helfen? Danke!

              1. Hi!

                SELECT from tv WHERE datum BETWEEN NOW( ) AND NOW( ) + INTERVAL 1 HOUR

                Was genau möchtest du SELECTieren?

                Du hast ein SQL-Problem und kein PHP-Problem. Wenn du dich auf SQL konzentriert und das PHP weggelassen hättest, wäre dir das vielleicht durch das passendere Syntax-Highlighting aufgefallen.

                Lo!

                1. Oh ja wie doof ...

                  Danke!