Powtarzające się wydarzenia w kalendarzu i ostatnia matematyka

Próbuję zagrać w niesławne powtarzające się wydarzenia w kalendarzach przy użyciu PHP / MySQL. W końcu znalazłem coś, co wydaje się działać. Znalazłem mojeodpowiedz tutaj ale mam trochę trudności z zakończeniem.

Moje pierwsze stoły „wydarzenia”.

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

Moja druga tabela 'events_meta, która przechowuje powtarzające się dane.

<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>

Z repeat_start jest datą bez czasu jako uniksowy znacznik czasu, a repeat_interval ilością w sekundach między interwałami (432000 to 5 dni).

Następnie mam następujący MySQL, który nieznacznie zmodyfikowałem z powyższego linku. Znacznik czasu użyty poniżej (1299132000, który jest 12 maja 2012 r.) To dzień bieżący bez czasu.

<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>

W powyższym MySQL poniższy kod odejmuje pole repeat_start (EM1.'meta_value') od bieżącej daty, a następnie dzieli ją przez pole interwału powtarzania (EM2.'meta_value').

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

LUB

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

Oto matematyka:

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

Teraz to działa doskonale. Ale jeśli zmienię bieżący znacznik czasu z wyprzedzeniem 5 dni na 1336312800, czyli 17 Mat 2012, wygląda to trochę tak:

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

Co nie działa, ponieważ jest równe 2, aw MySQL musi być równe 1. Myślę, że moje pytanie brzmi, jak uzyskać MySQL do rozpoznania liczby całkowitej, a nie do zrobienia tego?

<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>

Mam nadzieję, że mam sens i mam nadzieję, że jest to po prostu prosta rzecz matematyczna lub funkcja, którą MySQL może pomóc :) Dzięki za pomoc!

EDYCJA: ODPOWIEDŹ

Dzięki @eggypal poniżej znalazłem odpowiedź i oczywiście to było proste!

<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>

questionAnswers(1)

yourAnswerToTheQuestion