MySQL查询以选择在一个特定小时范围内注册的所有用户

时间:2015-10-28 08:06:48

标签: mysql sql mysqli cron mysql-select-db

我正在尝试使用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任务的用户。

用户的注册日期作为DATETIME字段存储在名为“register_date”的用户表中。

例如,如果我有两个用户:

  • 用户Alex于2015年10月10日上午10:10注册
  • 用户Sophia在上午08:52注册了相同的日期

    1. 我的cron任务在上午11:20执行...所以没有发送电子邮件,因为没有用户在上午11:00到凌晨12:00之间注册
    2. 我的cron任务在上午10点执行...如果Alex在过去24小时内收到一些通知,则会发送一封电子邮件!
    3. 我的cron任务在08
    4. 执行
你知道吗?那么如何更新我的查询以仅获取在同一时间注册我的cron任务的用户?

谢谢!

2 个答案:

答案 0 :(得分:1)

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

尝试这可能会有所帮助

答案 1 :(得分:0)

我自己找到了解决方案,这是我正在寻找的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

感谢您的帮助。