379 Stimmen

Wiederkehrende Ereignisse im Kalender - beste Speichermethode

Ich baue ein benutzerdefiniertes Ereignissystem, und wenn Sie ein sich wiederholendes Ereignis haben, das wie folgt aussieht:

Die Veranstaltung A wird ab dem 3. März 2011 alle 4 Tage wiederholt.

ou

Veranstaltung B wird ab dem 1. März 2011 alle 2 Wochen am Dienstag wiederholt.

Wie kann ich diese Daten in einer Datenbank so speichern, dass sie einfach abrufbar sind? Ich möchte keine Leistungsprobleme, wenn es eine große Anzahl von Ereignissen gibt, und ich muss durch jede einzelne gehen, wenn der Kalender gerendert wird.

3voto

dorogz Punkte 171

@Rogue Coder

Das ist großartig!

Sie könnten einfach die Modulo-Operation (MOD oder % in mysql) verwenden, um Ihren Code am Ende zu vereinfachen:

Anstelle von:

AND (
    ( CASE ( 1299132000 - EM1.`meta_value` )
        WHEN 0
          THEN 1
        ELSE ( 1299132000 - EM1.`meta_value` )
      END
    ) / EM2.`meta_value`
) = 1

Machen:

$current_timestamp = 1299132000 ;

AND ( ('$current_timestamp' - EM1.`meta_value` ) MOD EM2.`meta_value`) = 1")

Darüber hinaus könnte man auch Ereignisse einbeziehen, die sich nicht ewig wiederholen.

Es könnte etwas wie "repeat_interval_1_end" hinzugefügt werden, um das Datum des letzten "repeat_interval_1" zu bezeichnen. Dies macht die Abfrage jedoch komplizierter, und ich kann nicht wirklich herausfinden, wie man das macht ...

Vielleicht kann jemand helfen!

1voto

Adam Robinson Punkte 176996

Die beiden Beispiele, die Sie angeführt haben, sind sehr einfach; sie können als ein einfaches Intervall dargestellt werden (das erste sind vier Tage, das zweite sind 14 Tage). Wie Sie dies modellieren, hängt ganz von der Komplexität Ihrer Wiederholungen ab. Wenn Ihr obiges Beispiel wirklich so einfach ist, dann speichern Sie ein Startdatum und die Anzahl der Tage im Wiederholungsintervall.

Wenn Sie jedoch Dinge unterstützen müssen wie

Veranstaltung A wiederholt sich jeden Monat am 3. des Monats, beginnend am 3. März 2011

Oder

Veranstaltung A wird ab dem 11. März 2011 jeden zweiten Freitag im Monat wiederholt.

Dann ist das ein viel komplexeres Muster.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X