Repetir eventos de calendario y algunas matemáticas finales.

Estoy tratando de probar los infames eventos de repetición en calendarios usando PHP / MySQL. Finalmente he encontrado algo que parece funcionar. Encontré miresponde aqui pero estoy teniendo un poco de dificultad para terminarlo.

Mis primeros eventos de mesa.

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

Mi segunda tabla 'events_meta que almacena los datos que se repiten.

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

Con repeat_start es una fecha sin hora como marca de tiempo de Unix, y repeat_interval una cantidad en segundos entre intervalos (432000 es 5 días).

Luego tengo el siguiente MySQL que modifiqué ligeramente desde el enlace anterior. La fecha y hora utilizada a continuación (1299132000, que es el 12 de mayo de 2012) es el día actual sin hora.

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

En el MySQL anterior, el siguiente código deduce el campo repeat_start (EM1.'meta_value') a partir de la fecha actual y luego la divide por el campo de intervalo de repetición (EM2.'meta_value').

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

O

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

Así que aquí están las matemáticas:

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

Ahora que funciona perfecto. Pero si cambio la marca de tiempo actual con 5 días de anticipación a 1336312800, que es el 17 de Mat 2012, se parece un poco a esto:

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

Lo cual no funciona porque es igual a 2 y en MySQL debe ser igual a 1. Entonces, supongo que mi pregunta es, ¿cómo puedo hacer que MySQL reconozca un número entero en lugar de tener que hacer esto?

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

Espero que tenga sentido y espero que solo sea una simple cosa de matemática o una función que MySQL tenga que ayude :) ¡Gracias por su ayuda!

EDITAR: LA RESPUESTA

Gracias a @eggypal a continuación, encontré mi respuesta y, por supuesto, ¡fue simple!

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta