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.

    1. Моя задача cron выполняется в 11:20... Так что никакие электронные письма не отправляются, потому что нет пользователей, которые зарегистрировались между 11:00 и 12:00.
    2. Моя задача cron выполняется в 10:00... Если Алекс получил какие-либо уведомления за последние 24 часа, отправляется электронное письмо!
    3. Моя задача 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

Спасибо за вашу помощь.

Другие вопросы по тегам