überschneidende Zeitintervalle

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • überschneidende Zeitintervalle

    Erstmal einen guten Tag oder eine lange Nach... ;o)

    Ich bin gerade dabei einen Eventkalender zusammen zu stellen. Die Events können einen Tag lang laufen oder eine längere Zeitspanne.
    Deshalb habe ich ein Anfangdatum (date1) und ein Enddatum (date2) als date in einer mysql db angelegt.

    Nach meiner Abfrage:

    PHP-Code:
    ....
    $date1 $_REQUEST['year1']."-".$_REQUEST['month1']."-".$_REQUEST['day1'];
    $date2 $_REQUEST['year2']."-".$_REQUEST['month2']."-".$_REQUEST['day2'];
    ....
    $result mysql_query("SELECT * FROM events WHERE date1 BETWEEN
     '
    $date1' AND '$date2' ORDER BY date1") or die(mysql_error()); 
    werden zwar alle zukünftigen Events angezeigt aber nicht vergangene mit einer Zeitspanne, welche noch andauern da ja nach date1 selektiert wird.

    Nun meine Frage: Wie kann ich die Anfrage stellen, das auch die schon angefangenen aber noch andauernden Events angezeigt werden?
    Ein Sechser im Lotto und entdecke die Möglichkeiten.

  • #2
    versuchs mal mit ">=" und "<="
    Kissolino.com

    Kommentar


    • #3
      das ist eine gute Idee

      leider kann ich das im Moment nicht abprüfen da die Testumgebung schon abgeschaltet ist und ich auf dem Sprung nach Hause bin.

      Aber meinst Du es von der Logik her so:

      PHP-Code:
      WHERE date1<= '$date1' AND date2>='$date1' 
      ?
      Ein Sechser im Lotto und entdecke die Möglichkeiten.

      Kommentar


      • #4
        [MySQL 3.23.X] das hat natürlich nicht geklappt

        nach längerem Grübeln bin ich immer noch nicht dahinter gekommen, wo und anstelle was ich "<=" bzw. ">=" einsetzen soll. Das nagt an der Substanz. Kann mir jemand noch einen Tip geben? Bis auf RTFM denn da steht kein Bsp. dazu drin auch in dem Buch was ich habe wird so etwas leider nicht behandelt.
        Ein Sechser im Lotto und entdecke die Möglichkeiten.

        Kommentar


        • #5
          ne, eher
          PHP-Code:
          WHERE startdatum>= '$gesuchtesstartdatum' ODER enddatum<='$gesuchtesenddatum' 
          ^^ pseudo-code
          Kissolino.com

          Kommentar


          • #6
            das gestaltet sich wohl schwieriger

            Danke für die Hilfe, dies hatte ich auch schon versucht und eine riesige Anzahl an Datensätzen mit teilweisen Kombinierungen aus anderen Datensätzen erhalten.

            Daher hab mal folgendes versucht um eine andere Ausgangslage bzgl. des Codes zu haben:

            PHP-Code:
            date1>= '$date1' AND date1<='$date2' ORDER BY date1") or die(mysql_error()); 
            und damit das BETWEEN "nachgebaut". Es ändert aber nicht das Problem das schon angefangene Events, welche noch laufen angezeigt werden.

            z.B. ich gebe ein Event mit einer Laufzeit vom 10.10.05 - 23.10.05 und ein Event mit einer Laufzeit von einem Tag den 20.10.05 ein. Dann mache ich eine Abfrage s. vorheriger Code (der Kunde sucht ein Event im Zeitraum) mit date1 = 11.10.05 und date2 = 20.10.05

            Ausgabe ist: nur das event mit dem Datum 20.10.05 obwohl ein Event im Zeitraum 10.10.05 - 23.10.05 läuft. Es ist richtig knifflig.

            Vielleicht kann es sogar sein, das es so nicht möglich ist und wohl Zeiträume ausrechnen müsste oder so...
            Ein Sechser im Lotto und entdecke die Möglichkeiten.

            Kommentar


            • #7
              Re: das gestaltet sich wohl schwieriger

              Vielleicht kann es sogar sein, das es so nicht möglich ist und wohl Zeiträume ausrechnen müsste oder so...
              Du hast einen Zeitraum ($_REQUEST) und einen Event (auch ein Zeitraum).
              Frage: Überschneiden sich beide?

              (Formal: [Za...Ze], [Ea...Ee] aus N. Schnittmenge?)

              Fall 1: Ze < Ea -> nein
              Fall 2: Ze >= Ea
              Fall 2.1: Za > Ee -> nein
              Fall 2.2: ja

              Zeichne dir einen Zeitstrahl und spiel mal alle Varianten durch. Ich könnte auch was übersehen haben - ist schon spät.

              Kommentar


              • #8
                Lösung!

                Nach längerem suchen habe ich die Antwort gefunden:

                PHP-Code:
                $result mysql_query("SELECT * FROM events
                WHERE ('
                $date1' <= date2) AND ('$date2' >= date1)
                ORDER BY date1"
                ) or die(mysql_error()); 
                Ich hätte mich wohl nicht so auf WHERE date1 .... versteifen sollen, da ja auch nur nach date1 gesucht wird.

                Ein danke an alle, die sich hier einige Gedanken gemacht haben um mir zu helfen.
                Ein Sechser im Lotto und entdecke die Möglichkeiten.

                Kommentar

                Lädt...
                X