bense: Zeitfenster innerhalb eines Monats

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

  1. 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)

    1. http://dev.mysql.com/doc/mysql/de/Date_and_time_functions.html

    2. 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?

      1. 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

        1. 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'

          1. 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

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
  2. 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

    --
    ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
    http://www.makaio.de/quotations