Я создал систему, которая будет рассчитывать данные каждый месяц в зависимости от того, когда пользователь зарегистрировался.
Я буду запускать ежедневное задание cron для сбора всех пользователей, которым требуется вычисленная информация, и яхотел бы захватить всех пользователей за каждый день.
Если бы все пользователи подписались на что-то вроде 2011-01-01
Простой запрос нашел бы это (если вчера был конец периода):
SELECT `user_id`
FROM `table`
WHERE DAY( `date_created` ) = DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) )
Сложнее, если они зарегистрировались на 2011-03-31
Какой запрос я могу использовать, чтобы убедиться, что на 2011-04-30
они будут найдены?
Я думаю, что-то вроде
SELECT `user_id`
FROM `table`
WHERE
DAY( `date_created` ) = DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) )
OR DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) ) < DAY( `date_created` )
AND LAST_DAY( DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY ) ) = DATE_SUB( CURRENT_DATE(), INTERVAL 1 DAY )
Это не кажется очень эффективным, и я не знаю, сработает ли это (хотя я подозреваю, что это сработает).
Есть ли попытканастоящий метод?Или есть ли лучший способ сделать это?