sql abfrage mit datumsfunktionen

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

  • sql abfrage mit datumsfunktionen

    hallo!

    ich habe folgendes problem:

    ich habe ich einer mysql tabelle ein startdatum (format DATE) ein enddatum (format DATE) und die spalte "wiederholung". in dieser spalte steht entweder eine 1 (täglich), 7 (wöchentlich), 14 (14 tägig), monat (monatlich) oder jahr (jährlich).

    nun habe ich ein bestimmtes datum und möchte überprüfen ob auf dieses datum das bestimmte ereignis in der datenbank zutrifft.

    wie kann ich das am besten machen? ich muss ja irgendwie das startdatum mit der entsprechenden wiederholung erweitern und überprüfen ob das auf das aktuelle datum zutrifft.

    natürlich könnte ich es erst aus der datenbank auslesen und dann überprüfen. dann müsste ich aber, wenn die zeitspanne mehrere jahre beträgt, jeden einzelnen tag in einer schleife überprüfen. dies würde ja extrem auf die performance gehen...

    hat jemand eine idee wie ich dies bereits mit der mysql abfrage lösen kann??

  • #2
    Wenn ich dich richtig verstehe:
    In Wiederholung, steht das Datum an dem es das nächste mal wiederholt werden soll?

    Dann überprüfst du erstmal, ob das heutige Datum zwischen start und end liegt, falls nicht brichst du ab, und wenn doch dann vergleichst du das heutige mit dem, an dem es wiederholt wird.

    btw.
    hatte zu früh auf ALT+S gedrückt
    Für Rechtschreibfehler übernehme ich keine Haftung!

    Kommentar


    • #3
      DATE_ADD()
      DATE_SUB()
      NOW()
      TO_DAYS()
      INTERVAL

      www.mysql.com

      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        Damian1984: nein, in wiederholung steht die periode in der das ereignis wiederholt wird! also 1,7,14,monat oder jahr

        Kommentar


        • #5
          Abraxax: diese funktionen habe ich mir schon angeschaut! aber irgendwie weiß ich nicht genau wie ich diese verwenden soll! kannst du mir weiterhelfen?

          Kommentar


          • #6
            male es doch mal auf dem papier auf, was berechnet werden soll und welche variablen in der gleichung sind.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              also ich habe jetzt unten stehende möglichkeit gefunden, mit der ich das ergebnis nicht mit einer schleife überprüfen muss! aber optimal ist es nicht! hätte das gerne bereits in der mysql abfrage eingeschränkt, das bekomme ich aber leider nicht hin. vielleicht kann mir noch jemand helfen.

              ps: hab es mit interval versucht. das würde vom prinzip her gehen, jedoch wird ja nur einmal das interval zum datum addiert. bei mir müsste es aber so lange gemacht werden bis ein enddatum erreicht wurde.

              PHP-Code:
              $query "SELECT id,datum_start,datum_ende,beschreibung,wiederholung FROM serientermine 
              WHERE datum_start<='"
              .$jahr.$monat.$tag."' AND datum_ende>='".$jahr.$monat.$tag."'";

              $select mysql_query($query);

              while (
              $data mysql_fetch_array($select)) {    
                      
              $differenz mktime(0,0,0,$monat,$tag,$jahr) - strtotime($data['datum_start']);
                      if (
              $data['wiederholung']=="1") {
                          if (
              $differenz % (1*24*60*60) == "0") {
                              echo 
              $data['beschreibung']."<br>";
                          }
                      }
                      
                      if (
              $data['wiederholung']=="7") {
                          if (
              $differenz % (7*24*60*60) == "0") {
                              echo 
              $data['beschreibung']."<br>";
                          }
                      }
                      
                      if (
              $data['wiederholung']=="14") {
                          if (
              $differenz % (14*24*60*60) == "0") {
                              echo 
              $data['beschreibung']."<br>";
                          }
                      }
                      
                      if (
              $data['wiederholung']=="monat") {
                          if (
              date('d',strtotime($data['datum_start'])) == $tag) {
                              echo 
              $data['beschreibung']."<br>";
                          }
                      }
                      
                      if (
              $data['wiederholung']=="jahr") {
                          if (
              date('dm',strtotime($data['datum_start'])) == $tag.$monat) {
                              echo 
              $data['beschreibung']."<br>";
                          }
                      }
                  } 

              Kommentar


              • #8
                Ich hatte solch ein ähnliches Problem letztens auch. Da ging es darum Mahnungen zu erstellen, die auf verschiedene Zeiträume wirken sollten. Da die Zeiträume, die gemahnt werden müssen, ja nirgends existieren, habe ich einen Weg über eine tempöräre Tabelle genommen, die mit den möglichen Zeiträumen gefüllt wird und diese dann auf den eigentlichen Datenbestand gejoint wird.... hat super geklappt. Evtl. gibts ja für dich einen ähnlichen Weg über solch eine Tabelle?

                Gruss
                Jan
                www.traum-projekt.com

                Kommentar

                Lädt...
                X