0

MySQL クエリで何かをしようとしていますが、これについてあなたの助けを求めています。

実際、Web サイトで日中に通知を受け取ったユーザーに (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 フィールドとして格納されます。

たとえば、2 人のユーザーがいるとします。

  • ユーザー Alex は 2015 年 9 月 10 日午前 10 時 10 分に登録しました
  • ユーザー Sophia は、同じ日付の午前 8 時 52 分に登録しました。
  1. 私のcronタスクは午前11時20分に実行されます...午前11時から午前12時の間に登録したユーザーがいないため、メールは送信されません

    1. 私の cron タスクは午前 10 時に実行されます... アレックスが過去 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 に答える