Kalender mit überschneidenden Serienterminen

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

  • Kalender mit überschneidenden Serienterminen

    Hallo !

    Ich habe folgendes Problem:

    Ich hab mir nen Kalender gebastelt ->
    http://www.nodsl.de/kalender/kalender.php
    (ist noch nicht ganz fertig)

    Nun besteht folgendes Problem:
    Ich hab eine Datenbank, mit einer Anfangszeit und einer Endzeit für einen Termin:

    id - datumstart - datumend
    1 2004-09-23 00:00:00 2004-09-25 00:00:00
    2 ...

    Da der Kalender mit Hilfe einer FOR - Schleife erstellt wird,
    ist in dieser jeweils der UNIX-Timestamp des aktuellen Tages vorhanden.

    FOR ($tag=1;$tag <= $anzahl_tage_des_monats;$tag++) { ... kalenderfeld erstellen..
    -> mktime(0,0,0,$monat,$tag,$jahr);

    Nun hab ich es schon geschafft, das Tage, die in zwischen datumstart und datumend fallen
    angegeben werden. Mein Problem ist nun, wenn sich Termine überschneiden, müsste ja dann
    "2 Termine" dastehen. Wie könnte man das lösen.

    Bzw. kann man das gleich per MySQL Abfrage lösen ?

  • #2
    Re: Kalender mit überschneidenden Serienterminen

    Original geschrieben von paddy
    Wie könnte man das lösen
    zählen

    bei mysql mit COUNT
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Re: Re: Kalender mit überschneidenden Serienterminen

      Original geschrieben von mrhappiness
      zählen
      ja ...
      bei mysql mit COUNT
      hier aber schwierig - denn in der DB stehen ja nur start- und end-datum, nicht aber die gesamten tage "dazwischen".

      wenn also nicht zwei termingrenzen auf den selben tag fallen, nützt COUNT() hier m.E. wenig bis gar nichts.


      aber es sollte ja kein problem sein, PHP-seitig aus "1 termin" "2 termine" zu machen.

      beim "erstellen" der termine mittels der for-schleife kann man ja die "belegten" tage erst mal in einem array ablegen, mit dem datum als schlüssel, wert zunächst 1.

      und wenn dann beim durchlauf für den nächsten termin zum datum xy schon ein eintrag im array vorhanden ist, dann wird der wert halt um 1 erhöht - wenn nicht, dann wird ein neuer eintrag mit wert 1 angelegt.


      anschließend kann dieses array dann bequem durchlaufen werden, und liefert für jeden enthaltenen tag die anzahl der termine ...


      (alternativ, wenn noch detailierte daten zum jeweiligen termin gespeichert werden sollen, kann man das ja auch als zweidimensionales array aufbauen, $termin['datum_xy'][] = "termindaten")
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        ich würde so ganz spontan wohl eine tabelle für einmaltermine und eine für serientermine machen (und noch irgendwie die art und weise der wiederhlung definieren) und die tabellen nutzen um termine anzulegen und zu bearbeiten

        zum anzeigen der termine könnte man ja trotzdem eine tabelle machen, bei der man die normalisierung eine gute idee sein lässt, auch für serientermine jeden tag reinhaut und die dann komfortabel auslesen kann

        aber das wäre ja schon ein halbes brainstorming...

        php-seitig zählen ist aber auch eine gute idee :-)
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Re: Re: Re: Kalender mit überschneidenden Serienterminen

          Original geschrieben von wahsaga
          ja ...

          hier aber schwierig - denn in der DB stehen ja nur start- und end-datum, nicht aber die gesamten tage "dazwischen".

          wenn also nicht zwei termingrenzen auf den selben tag fallen, nützt COUNT() hier m.E. wenig bis gar nichts.


          aber es sollte ja kein problem sein, PHP-seitig aus "1 termin" "2 termine" zu machen.

          beim "erstellen" der termine mittels der for-schleife kann man ja die "belegten" tage erst mal in einem array ablegen, mit dem datum als schlüssel, wert zunächst 1.

          und wenn dann beim durchlauf für den nächsten termin zum datum xy schon ein eintrag im array vorhanden ist, dann wird der wert halt um 1 erhöht - wenn nicht, dann wird ein neuer eintrag mit wert 1 angelegt.


          anschließend kann dieses array dann bequem durchlaufen werden, und liefert für jeden enthaltenen tag die anzahl der termine ...


          (alternativ, wenn noch detailierte daten zum jeweiligen termin gespeichert werden sollen, kann man das ja auch als zweidimensionales array aufbauen, $termin['datum_xy'][] = "termindaten")
          Das war auch im Ansatz meine Idee, danke für die Bestätigung .
          Ich werd mal versuchen, das umzusetzen - dann meld ich mich nochmal.

          danke für eure Hilfe

          BTW: Wie findet ihr den Kalender ?

          Kommentar


          • #6
            So, ich bin das Problem so angegangen, wie es mir vorgeschlagen wurde,
            mittels eines Arrays die Anzahl der Termin hochzuzählen.
            Das funktioniert auch super - is aber noch net ausgereift

            Ich hab jedoch ein Problem mit der Query, die die Serientermine abfragen soll:
            Diese Query steht in einer FOR-Schleife:

            FOR ($tag=1;$tag < $anzahl_der_tage_des_monats;$tag++) {...
            $dateofday = $tag.".".$monat.".".$jahr;

            # datumstart -> Anfang des Serientermins
            # datumende -> Ende des Serientermins (beide YYYY-MM-DD HH:MM:SS)

            Code:
            $cal_query_2  = "SELECT id FROM db_tabelle WHERE '$dateofday' >= (DATE_FORMAT(datumstart,'%Y.%c.%e')) AND ";
            $cal_query_2 .= "'$dateofday' <= (DATE_FORMAT(datumende,'%Y.%c.%e')) AND datumstart < datumende";
            Das Ergebnis wird dann in einer WHILE-Schleife in ein Array eingetragen->
            PHP-Code:
            If ((is_array($arr_day)) && (array_key_exists($dateofday,$arr_day))) {
                        
            $arr_day[$dateofday] = ($arr_day[$dateofday])+1;
            }Elseif ((
            is_array($arr_day) && (!array_key_exists($dateofday,$arr_day)))) {
                        
            $arr_day[$dateofday] = "1";
            }Else{
                        
            $arr_day = array("$dateofday=> "1");

            ^^ Soweit funtkioniert die Query auch, wenn der Termin innerhalb eines Monats liegt und sich nicht
            über ein Monatsende bewegt.Aber sobald zum Beispiel 'datumstart' = 2004-09-28 und 'datumende' = 2004-10-02
            ist, fällt es aus der Query raus - d.h. die Query findet dieses Datensatz gar nicht, obwohl die FOR Schleife
            alle Tage durchläuft. Einzeltermine werden gefunden.

            Beispiele:
            -> Datumstart (2004-08-01)
            -> Datumende (2004-08-10)
            Folgendes Array entsteht :
            Array ( [2004.8.1] => 1 [2004.8.10] => 1 )
            ^^ es wird nur der Starttermin und der Endtermin in das Array eingetragen
            Die Query findet nur am 01.08. und am 10.08. einen Datensatz der zutrifft.

            -> Datumstart (2004-09-23)
            -> Datumende (2004-09-29)
            Folgendes Array entsteht :
            Array ( [2004.9.23] => 1 [2004.9.24] => 1 [2004.9.25] => 1 [2004.9.26] => 1
            [2004.9.27] => 1 [2004.9.28] => 1 [2004.9.29] => 1 )
            ^^ genau das was ich haben will.
            Die Query findet an jedem der einzelnen Tage einen Datensatz der zutrifft.

            Woran könnte das liegen ?

            bis denne paddy

            Kommentar

            Lädt...
            X