Wiederholte Kalenderereignisse und einige abschließende Berechnungen

Ich versuche, die berüchtigten wiederkehrenden Ereignisse auf Kalendern mit PHP / MySQL auszuprobieren. Ich habe endlich etwas gefunden, das zu funktionieren scheint. Ich habe meine gefundenantworte hier aber ich habe ein wenig Schwierigkeiten, es zu beenden.

Mein erster Tisch 'Events'.

<code>ID    NAME
1     Sample Event
2     Another Event
</code>

Meine zweite Tabelle 'events_meta', in der die sich wiederholenden Daten gespeichert sind.

<code>ID    event_id      meta_key           meta_value
1     1             repeat_start       1336312800 /* May 7th 2012 */
2     1             repeat_interval_1  432000 /* 5 days */
</code>

Wenn repeat_start ein Datum ohne Uhrzeit als Unix-Zeitstempel ist und repeat_interval eine Anzahl von Sekunden zwischen Intervallen (432000 sind 5 Tage).

Ich habe dann das folgende MySQL, das ich über den obigen Link leicht modifiziert habe. Der unten verwendete Zeitstempel (1299132000, 12. Mai 2012) ist der aktuelle Tag ohne Zeitangabe.

<code>SELECT EV.*
FROM `events` EV
RIGHT JOIN `events_meta` EM1 ON EM1.`event_id` = EV.`id`
RIGHT JOIN `events_meta` EM2 ON EM2.`meta_key` = CONCAT( 'repeat_interval_', EM1.`id` )
WHERE EM1.meta_key = 'repeat_start'
    AND (
        ( CASE ( 1336744800 - EM1.`meta_value` )
            WHEN 0
              THEN 1
            ELSE ( 1336744800 - EM1.`meta_value` ) / EM2.`meta_value`
          END
        )
    ) = 1
</code>

Im obigen MySQL wird mit dem folgenden Code das Feld repeat_start abgezogen (EM1.'meta_value') vom aktuellen Datum ab und dividiert es durch das Feld Wiederholungsintervall (EM2.'meta_value').

<code>ELSE ( 1336744800 - EM1.`meta_value` ) / EM2.`meta_value`
</code>

ODER

<code>TODAYS DATE - START DATE / 5 DAYS
</code>

Also hier ist die Mathematik:

<code>1336744800 - 1336312800 = 432000
432000 / 432000 = 1
</code>

Das funktioniert jetzt perfekt. Aber wenn ich den aktuellen Zeitstempel 5 Tage im Voraus in 1336312800 ändere, was 17. Mat 2012 ist, sieht es ein bisschen so aus:

<code>1336312800 - 1336312800 = 864000
86400 / 432000 = 2
</code>

Was nicht funktioniert, weil es 2 ist und in MySQL 1 sein muss. Ich schätze, meine Frage ist, wie ich MySQL dazu bringen kann, eine ganze Zahl zu erkennen, anstatt dies tun zu müssen.

<code>...
WHERE EM1.meta_key = 'repeat_start'
    AND (
        ( CASE ( 1336744800 - EM1.`meta_value` )
            WHEN 0
              THEN 1
            ELSE ( 1336744800 - EM1.`meta_value` ) / EM2.`meta_value`
          END
        )
    ) = IN (1,2,3,4,5,6,7,8,....)
</code>

Hoffe, ich mache Sinn und ich hoffe, es ist nur eine einfache mathematische Sache oder eine Funktion, die MySQL hat, die helfen wird :) Vielen Dank für Ihre Hilfe!

EDIT: DIE ANTWORT

Dank @eggypal unten habe ich meine Antwort gefunden und natürlich war es einfach!

<code>SELECT EV.*
FROM elvanto_calendars_events AS EV
RIGHT JOIN elvanto_calendars_events_meta AS EM1 ON EM1.`event_id` = EV.`id`
RIGHT JOIN elvanto_calendars_events_meta AS EM2 ON EM2.`meta_key` = CONCAT( 'repeat_interval_', EM1.`id` )
WHERE EM1.meta_key = 'repeat_start'
AND ( ( 1336744800 - EM1.`meta_value` ) % EM2.`meta_value`) = 0
</code>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage