我正在尝试使用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于2015年10月9日上午10:10注册
- 用户Sophia在上午08:52注册了同一日期
我的cron任务在上午11:20执行。。。所以没有发送电子邮件,因为没有用户在上午11点到12点之间注册
我的cron任务在上午10:00执行。。。如果亚历克斯在过去24小时内收到了一些通知,就会发送一封电子邮件!
我的cron任务在08 执行
如何更新查询以只获取在执行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 >= 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