Zeitfenster innerhalb eines Monats
bense
- php
Hallo zusammen
Ich trage Zeiten, bzw. Zeitspannen in eine MySQL-DB ein. Dazu verwende ich den Timestamp von PHP. Es gibt also einen Anfangs- und einen End-Timestamp. Nehmen wir mal an, an jedem Tag eines Monats habe ich einen Eintrag. Jetzt will ich nur die Einträge auslesen, die 19:00 Uhr beinhalten. Also zum Beispiel 17:00-23:00 Uhr beinhaltet es, 13:00-16:00 nicht.
Muss ich jetzt da wirklich für jeden Tag einen "19-Uhr-Timestamp" bilden und das ganze mit einer Schleife abarbeiten oder gibt es da eine Möglichkeit, bereits in MySQL zu differenzieren?
Das Problem ist ja, dass der 19-Uhr-Timestamp jeden Tag variiert, d.h. ich kann nicht wie wenn ich einfach das Datum separat und die Zeit separat hätte alle Einträge auslesen, welche 19:00 Uhr "between" ist.
Ich hoffe, das ist irgendwie verständlich...
Danke und Gruss
Wenn ich mich nicht irre gibt es die Funktion date() auch in MySQL.
d.h. über DATE("d",feldname) kannst du z.B. den Tag des Monats ausgeben lassen.
(kann es hier in der Arbeit nicht testen, wahrscheinlich stimmt die Syntax nicht ganz)
http://dev.mysql.com/doc/mysql/de/Date_and_time_functions.html
Ja, das nützt mir aber meiner Meinung nach nichts. Dann muss ich ja trotzdem für jeden Tag den Timestamp in einer Schleife generieren, auch wenn ich das in MySQL mache. Das heisst ich kann trotzdem nicht einfach alle Zeitspannen, wo 19:00 Uhr drinliegt auslesen.
Wenn ich ja den Timestamp generiere, dann gilt er NUR für den jeweiligen Tag und nicht für jeden beliebigen des Monats.
Oder liege ich da falsch?
mach zwei spalten
von , bis
1 spalte
16 uhr
2 spalte
24 uhr
dann formulierst du deine abfrage..
where hour(von) <='19 uhr' and hour(bis) >='24 uhr'
von: zeige alles was kleiner gleich 19 ist
bis : zeige alles was grösser gleich 24 ist
müsste eigentlich so gehen wenn ich mich nicht irre
löl
das geht nämlich nicht sehe ich..
where hour(von) <='19 uhr' and hour(bis) >='24 uhr'
wäre dann ja nur eine möglichkeit
von
1-19
und bis muss aufjedenfall >= 24 sein.. *kopfschüttel*
was habe ich mir denn dabei gedacht?! *g*
es müsste heissen
where hour(von) <='19 uhr' and hour(bis) >='19 uhr'
Hello,
where hour(von) <='19' and hour(bis) >='24'
Das 'uhr' würde ich da auch noch rauslassen.
Außerdem sollte man darauf achten, dass der Timespamp-Typ von MySQL nicht identisch ist mit dem Unix-Timestamp von PHP. Der von MySQL ist human readable, brucht mehr Bytes und hat einen wesentlich größeren Wertebereich.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo!
Es gibt den Datentyp DATETIME. Der speichert dir Datum und Zeit im Format "JJJJ-MM-TT SS:MM:ss".
Wenn du den jeweils für von und bis definierst kannst du recht einfach feststellen, ob da um 19 Uhr was los ist. Helfen tut dir dabei ggf. strtotime(), die dir einen solchen String in einen Timestamp transformiert und somit die Anwendung der diversen MySQL-Funktionen erlaubt, die meist (oder ausschließlich?) einen Timestamp verlangen.
Alternativ reicht dir vielleicht auch schon ein Feld vom Typ DATE und zwei vom TYP TIME. Gleiches Prozedere, nur weniger Speicherplatz nötig.
Gruß
Matthias