Zeitabfrage in php/mySQL
Bummsi
- php
0 suit0 Vinzenz Mai
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!
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.
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
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ß
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
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
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!
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
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
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!
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!
Oh ja wie doof ...
Danke!