0

我正在尝试使用 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 年 9 月 10 日上午 10:10 注册
  • 用户 Sophia 在同一天上午 08:52 注册
  1. 我的 cron 任务在上午 11:20 执行......所以没有发送电子邮件,因为没有用户在上午 11:00 到 12:00 之间注册

    1. 我的 cron 任务在上午 10:00 执行...如果 Alex 在过去 24 小时内收到一些通知,则会发送一封电子邮件!

    2. 我的 cron 任务在 08 执行

如何更新我的查询以仅获取在我的 cron 任务执行的同一时间注册的用户?

4

2 回答 2

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
于 2015-10-28T08:09:41.830 回答
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
于 2015-10-28T08:35:31.690 回答