Sophie: Wiederkehrende Termine

Guten Morgen,

ich habe eine kleine To Do Liste. Jetzt möchte ich diese um folgende Punkte erweitern:

  • Datum
  • Datum bis
  • Wiederholung

Wenn ich ein "Datum" wähle, dann wird mir die To Do an diesem Tag angezeigt Wenn ich "Datum bis" wähle, dann wird mir die To Do jeden Tag bis zum Enddatum angezeigt

Wenn ich "Wiederholung" wähle, dann soll folgendes passieren

  • Wochentag wählen
  • Zeitraum wählen
    • täglich
    • jeden Woche
    • jeden Monat
    • jedes Jahr

Die Frage ist jetzt, wie lege ich da die Datenbank an? Ich muss nicht jeden Termin extra eintragen? Ich habe mir folgendes gedacht:

  • Datum_ab
  • Datum_bis
  • Wochentag
  • Zeitraum

Komme ich damit aus?

  1. Hallo Sophie,

    mit diesem Problem beschäftige ich mich seit Jahren für meinen Veranstaltungskalender, habe verschiedene Lösungen ausprobiert, keine stellt zufrieden.

    Jeder Datensatz kan "tag_bis" enthalten. Vor dem Folgetag wird die Veranstaltung nicht gelöscht.

    Museen bieten Dauer-Ausstellungen. Auf vielen Stadt-Portalen führen diese Daten die Kalender an, die aktuellen Termine beginnen nicht selten erst auf Folgeseiten. Das wollte ich nicht.

    Bei mir muss man den Datensatz auf jeden folgenden Tag kopieren, das geht fix, nur neues Datum und Enter. Flohmarkt-Betreiber machen das so. Jetzt ist das Problem, dass bei Änderung dutzende von Sätzen zu ändern wären, das macht keiner, also unkorrekte Infos im Kalender.

    Dann habe ich nach dem Lesen aus der DB den Satz im Speicher kopiert auf jeden Tag im Gültigkeitsbereich. Problem: Ruhetage können nicht berücksichtigt werden.

    Nächster Versuch: Die einzelnen Tage in die Beschreibung reinschreiben und nur auf diese Tage im Speicher kopieren. Problem: Seitenwechsel der Anzeige. Wenn ich LIMIT (100,25) angebe, sind die Sätze gar nicht dabei, die im Speicher zu kopieren wären.

    Ich verzichte ganz bewusst darauf, dir nun eine fiktive n-te Lösung vorzuschlagen. Kannst du mehr von der Anwendung schreiben?

    Gruß, Linuchs

    1. Bei mir muss man den Datensatz auf jeden folgenden Tag kopieren, das geht fix, nur neues Datum und Enter. Flohmarkt-Betreiber machen das so. Jetzt ist das Problem, dass bei Änderung dutzende von Sätzen zu ändern wären, das macht keiner, also unkorrekte Infos im Kalender.

      Trenne in der DB die Daten auf:

      • Tabelle 1: Veranstaltung mit Beschreibung und ID (MD5(Beschreibung . Ort . ...) reicht.
      • Tabelle 2: Termine + IDs der Veranstaltungen.
      • Tabelle 3: Wiederholungsalgorithmen + IDs der Veranstaltungen.

      Eventuell weitere Tabellen (Wer hat den Termin eingetragen / Rechte ...)

      Dann sollte eine solche Änderung "Pillepalle" sein. Allerdings muss bei Verwendung von komplizierten und in SQL (nicht ohne Fullscan) abfragbaren Algos aus Performancegründen der eigentliche (Jahres-)Kalender nach jeder Änderung neu "geparst" werden.

  2. Liebe Sophie,

    Dir helfe ich nicht mehr, da Du es nicht nötig hast rückzumelden, ob und wie ein Posting (nicht) geholfen hat.

    Liebe Grüße,

    Felix Riesterer.

    1. Mach das! Wir leben in einem freien Land!

      1. Ich finde, da hat Felix Recht. Es ist ein Gebot der Höflichkeit und der Mindestpreis der ansonsten kostenlosen Hilfe hier, dem Antwortenden eine Rückmeldung und/oder ein Dankeschön zu senden.

        Für "patzige Antworten" jedenfalls bist du anscheinend auch zu haben, stimmts?

        Konny

    • Datum
    • Datum bis
    • Wiederholung

    Wenn ich ein "Datum" wähle, dann wird mir die To Do an diesem Tag angezeigt Wenn ich "Datum bis" wähle, dann wird mir die To Do jeden Tag bis zum Enddatum angezeigt

    Soweit klar.

    Wenn ich "Wiederholung" wähle, dann soll folgendes passieren

    • Wochentag wählen
    • Zeitraum wählen
      • täglich
      • jeden Woche
      • jeden Monat
      • jedes Jahr

    Eine Wiederholung gehört meines Erachtens zum Termin, der sich wiederholen soll, nicht in die Auswahl der anzuzeigenden Termine, wie es bei deinen beiden anderen Filtern "Datum" und "Datum bis" der Fall ist.
    Insofern verstehe ich deine Aufgabenstellung nicht.

    Davon unabhängig solltest du dir überlegen, was du mit "jede Woche / Monat / Jahr" meinst. Eine Wiederholung "jede Woche" ist überflüssig, wenn man, wie von dir vorgesehen, den Wochentag festlegen kann - Wochentage wiederholen sich von ganz alleine wöchentlich.

    Anders wäre es einzig, falls der Termin verpasst werden darf, du also mit "jede Woche" eigentlich "irgendwann in der Woche" meinst. Vergesse ich montags meinen wöchentlichen Waschtag, kann ich die Wäsche immer noch am Dienstag waschen, um "jede Woche waschen" zu erfüllen.
    Den Müll hingegen muss ich Donnerstags rausstellen, sonst wird er in der Woche gar nicht abgeholt.

    Weiter wäre dann zu hinterfragen, warum ich nur Wochentage, aber nicht Monatstage bzw. Monate eintragen kann. Den jährlichen Zahnarztbesuch kann ich irgendwann erledigen, aber den Weihnachtsbaum sollte ich tunlichst im Dezember kaufen.

    Die Frage ist jetzt, wie lege ich da die Datenbank an? Ich muss nicht jeden Termin extra eintragen? Ich habe mir folgendes gedacht:

    • Datum_ab
    • Datum_bis
    • Wochentag
    • Zeitraum

    Den Zeitraum hast du schon mit Datum_ab und Datum_bis abgedeckt. Die Wiederholung bräuchtest du, sowie je ein Feld Tag und Monat. Alternativ könnte man auch Datum_ab als ersten Termineintritt festlegen, dann ergeben sich Wochentag, Tag und Monat automatisch aus Datum_ab und müssten nicht separat gespeichert werden.

    1. Hallo,

      Alternativ könnte man auch Datum_ab als ersten Termineintritt festlegen, dann ergeben sich Wochentag, Tag und Monat automatisch aus Datum_ab und müssten nicht separat gespeichert werden.

      War meine erste Idee, stellte sich aber als schlechte Idee raus. Heute haben wir Donnerstag, den 05.10.2017. Jetzt möchte ich in einem Jahr diesen Termin wieder am Donnerstag haben, dann kann ich mit dem Datum nicht rechnen? Denn nächstes Jaht ist der 05.10.2017 kein Donnerstag sondern ein Freitag.

      1. Heute haben wir Donnerstag, den 05.10.2017. Jetzt möchte ich in einem Jahr diesen Termin wieder am Donnerstag haben, dann kann ich mit dem Datum nicht rechnen? Denn nächstes Jaht ist der 05.10.2017 kein Donnerstag sondern ein Freitag.

        Mir scheint, du solltest erstmal eine genaue Anforderungsliste erstellen, denn das scheint mir schon sehr komplex zu werden.

        Nach deinem Einwand könnte ich jetzt auch noch fragen, ob es der erste Donnerstag vor oder nach dem 5.10. des Jahres sein soll. Oder soll auch einfach nur der "erste Donnerstag eines Oktobers" möglich sein? Vielleicht auch der "zweite, dritte, letzte Donnerstag eines Monats"?
        Wie ist es mit den Wiederholungen, im Moment hast du nur wöchentlich, monatlich und jährlich vorgesehen, aber man könnte doch auch "alle zwei Wochen / Monate / Jahre" benötigen?

        Kurzum: Das lässt sich noch lange fortführen, die Datenbank muss entsprechend aussehen. Für das Wie fehlen hier bislang die Details.

        In jedem Falle wirst du aber bei Verwendung einer SQL-Datenbank nicht darum herumkommen, die Terminspezifikationen und zusätzlich den sich jeweils ergebenden nächsten Termin abzuspeichern. Nur mit SQL wirst du aus den Spezifikationen nicht den nächsten Termin herausrechnen können, dazu braucht es "höhere" Logik.