sowas wie "DATE_RANGE()" ?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • sowas wie "DATE_RANGE()" ?

    Hallo,

    ich bin zur zeit auf der Suche nach einer Lösung die mir folgendes ermöglicht.

    Ich möchte in einem Monat (bsp: 01.09.2007) nur Einträge die zwischen 01:00 - 02:00 Uhr (fiktive Uhrzeit) filtern.

    Soweit überhaupt kein Problem;

    Code:
    WHERE [table] BETWEEN [startDate] AND [endDate]
    ,aber was mache ich nun wenn ich nich nur ein Datum habe, sondern vom 01.09.2007 - 13.09.2007 oder für den kompletten Monat 09.2007 die Einträge zwischen 01:00 - 02:00 Uhr haben möchte?

    Muss ich tatsachlich ein:

    Code:
    WHERE [table] BETWEEN [startDate] AND [endDate]
      AND [table] BETWEEN [startDate] AND [endDate]
      ...
      AND [table] BETWEEN [startDate] AND [endDate]
      ...
    , machen?

    Falls eine dafür vorgesehene Funktion gibt, möge doch der Wissende den unwissenden belehren

  • #2
    Weiterer ansatz wäre:

    Code:
    WHERE FROM_UNIXTIME( beginn, '%H:%i' ) > '1:00'
      AND FROM_UNIXTIME( beginn, '%H:%i' ) < '2:00' 
      AND beginn BETWEEN 01.09.2007 AND 13.09.2007;
    Nur zur Demonstration!

    Comment


    • #3
      WHERE zeit BETWEEN anfang AND ende AND datum BETWEEN startdatum AND enddatum
      so was in dieser Richtung?
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Comment


      • #4
        Das Problem an der Sache ist ja die, wenn ich ein Start-, und Enddatum setze, dann ignoriert "er" ja die darauf folgende Zeit-Range. ( omg )

        Die Spalte `beginn` ist vom Typ INT(10), wer auch immer sich so ein Scheiss einfallen lassen hat, gehört bestraft.

        Der Wert ist ein reines PHP time();

        @jahlives

        Dein Vorschlag kommt meinem 2ten. Post nahe, wirkt sich jedoch Zeitübergreifend aus.
        d.H.:

        Startdatum: 01.09.2007 - 01:00 Uhr
        Enddatum: 03.09.2007 - 02:00 Uhr,

        ignoriert er dezent die Zeit Angabe und kramt alles raus was zwischen den beiden Zeiten liegt, was ich eben nicht möchte.

        Comment


        • #5
          Zeit und Datum in einem DATETIME-Feld zusammenlegen. Dann klappts auch mit (nur einem) BETWEEN!

          Alternativ müßte das auch mit FROM_UNIXTIME() gehen. Pseudocode:

          WHERE FROM_UNIXTIME(feld) BETWEEN "2007-10-01 22:00" AND "2007-10-03 10:00"

          kenne aber die genaue Syntax nicht. Falls der Ansatz quatsch ist, nicht schlagen, ich ha grad Mittagspause
          Last edited by pekka; 01-10-2007, 15:08.

          Comment


          • #6
            Original geschrieben von pekka
            Alternativ müßte das auch mit FROM_UNIXTIME() gehen. Pseudocode:

            WHERE FROM_UNIXTIME(feld) BETWEEN "2007-10-01 22:00" AND "2007-10-03 10:00"
            Negative Houston, so ignoriert MySQL 5.0 die Zeitangabe für den 2.10.2007 komplett und kramt mir da die Einträge von 00:00 - 23:59 raus.

            Ich denke ich werde diesen Weg wählen:

            Code:
            WHERE FROM_UNIXTIME( beginn, '%H:%i' ) > '1:00'
              AND FROM_UNIXTIME( beginn, '%H:%i' ) < '2:00' 
              AND beginn BETWEEN 01.09.2007 AND 13.09.2007;
            OffTopic:
            Mittagspause? Fleissig, hab in 51 Minuten Feierabend. Bierchen?
            Last edited by Skaschy; 01-10-2007, 15:14.

            Comment


            • #7
              Habe das mal zu Hause auf der DB probiert und das folgende sollte funzen.
              Habe 2 DS in der Tabelle wobei beide die Bedingung mit adatum erfüllen. Jedoch nur einer hat die azeit in der geforderten "range". Die DB gibt nur einen DS zurück
              Code:
              SELECT *
              FROM zeit
              WHERE (
              adatum
              BETWEEN '2007-07-01'
              AND '2007-09-01'
              )
              AND (
              azeit
              BETWEEN '08:00:00'
              AND '22:10:00'
              )
              Oder habe ich komplett falsch verstanden was du machen willst?

              Gruss

              tobi
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Comment


              • #8
                Genau, sowas suche ich.

                Ich werd mal probieren welche der Möglichkeiten am schnellsten ist.

                Danke jahlives, nur habe ich nur ein "time();" in der der Datenbank, wie viel "futtert" in dem Fall ein FROM_UNIXTIME(DATE('...... an der Performance des MySQL Servers.

                OffTopic:
                Am liebsten wäre es wenn die load bei 0 bleibt *ironie*

                Comment


                • #9
                  in der der Datenbank, wie viel "futtert" in dem Fall ein FROM_UNIXTIME(DATE('...... an der Performance des MySQL Servers.
                  Nicht mehr als eine Query über alle Felder und ein PHP Skript welches das BETWEEN erledigt
                  Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                  Comment


                  • #10
                    Code:
                    SELECT
                        attribut_1,
                        attribut_2,
                        ....
                        attribut_n
                    FROM
                        zeit
                    WHERE
                        DATE(datum) BETWEEN '2007-07-01' AND '2007-09-01'
                      AND
                        TIME(datum) BETWEEN '08:00:00' AND '09:00:00'
                    Gruss
                    H2O

                    Comment

                    Working...
                    X