MySQL запрос, чтобы выбрать всех пользователей, которые зарегистрировались в течение одного определенного часового диапазона
Я пытаюсь что-то сделать с запросом MySQL и запрашиваю вашу помощь для этого.
На самом деле я хочу отправлять ежедневное электронное письмо (с задачей cron) пользователям, которые получили уведомление в течение дня на моем сайте. У меня уже есть этот запрос, который является следующим:
SELECT u.username, u.email, COUNT(*) AS nb_notification
FROM notification n, user u
WHERE n.to_user_id = u.id
AND u.status = 1
AND n.date >= now() - INTERVAL 1 DAY
AND n.status = 0
GROUP BY u.username
Теперь я хотел бы улучшить этот запрос, чтобы все электронные письма не отправлялись в течение одного часа. Для этого у меня возникла следующая идея: получить только тех пользователей, которые зарегистрировались в течение того же часа, когда выполняется задача cron.
Дата регистрации пользователя сохраняется в пользовательской таблице под именем "register_date" в качестве поля DATETIME.
Например, если у меня есть два пользователя:
- Пользователь Alex зарегистрирован 09.10.2015 в 10:10
Пользователь Sophia зарегистрировался в тот же день в 08:52.
- Моя задача cron выполняется в 11:20... Так что никакие электронные письма не отправляются, потому что нет пользователей, которые зарегистрировались между 11:00 и 12:00.
- Моя задача cron выполняется в 10:00... Если Алекс получил какие-либо уведомления за последние 24 часа, отправляется электронное письмо!
- Моя задача cron выполнена в 08
Вы понимаете? Итак, как я могу обновить свой запрос, чтобы получать только пользователей, которые зарегистрировались в тот же час, когда выполняется мое задание cron?
Спасибо!
2 ответа
SELECT u.username, u.email, COUNT(*) AS nb_notification
FROM notification n, user u
WHERE n.to_user_id = u.id
AND u.status = 1
AND n.date >= DATE_SUB(NOW(),INTERVAL 1 HOUR)
AND n.status = 0
GROUP BY u.username
Попробуйте это может быть полезно
Сам нашел решение, вот запрос MySQL, который я искал:
SELECT u.username, u.email, COUNT(*) AS nb_notification
FROM notification n, user u
WHERE n.to_user_id = u.id
AND u.status = 1
AND n.date >= now() - INTERVAL 1 DAY
AND n.status = 0
AND HOUR(u.register_date) = HOUR(NOW())
GROUP BY u.username
Спасибо за вашу помощь.