/ / Cómo SELECCIONAR * de la tabla DÓNDE día del mes = día actual del mes y no perder a los usuarios el 31 - mysql, cron

Cómo SELECCIONAR * de la tabla DÓNDE día del mes = día actual del mes y no perder a los usuarios el día 31 - mysql, cron

Tengo un trabajo cron que envía por correo electrónico una lista de usuarios.mensual. El cron se ejecuta diariamente y busca la fecha de registro en la tabla de usuarios. La idea es enviar al usuario un mes después de registrarse y continuar haciendo esto durante la vida de su cuenta. Estaba pensando en hacer algo como esto:

SELECT *
FROM users
WHERE DAYOFMONTH(signup_date) = DAYOFMONTH(now());

El problema es que esto extrañará a los usuarios todos los demás.mes de registro el 31 (sin mencionar los problemas en febrero con años bisiestos). ¿Hay una declaración SQL que garantice que cada usuario será seleccionado al menos una vez al mes cuando se ejecute diariamente? Tampoco quiero crear un campo adicional en la base de datos (como date_last_emailed).

Respuestas

3 para la respuesta № 1

Tal vez el último día del mes incluya a todos los usuarios que se registraron ese día o después?

WHERE IF(
DAY(NOW()) == DAY(LAST_DAY(NOW())),
DAY(signup_date) >= DAY(NOW()),
DAY(signup_date) = DAY(NOW())
)

0 para la respuesta № 2
SELECT a, b
FROM tbl
WHERE DAYOFMONTH(signup_date) = DAYOFMONTH(CURRENT_DATE)
OR
-- special handling for end of month
(LAST_DAY(CURRENT_DATE) = CURRENT_DATE
AND
DAYOFMONT(signup_date) > DAYOFMONTH(CURRENT_DATE))

El 28 de febrero de un año no bisiesto, se enviará por correo electrónico a aquellos que se inscribieron el 29, 30 o 31 de cualquier mes.

ACTUALIZAR Corregido por comentarios.