1

基本的に、非アクティブなメンバーが 30 日以上ログインしていない場合にアカウントで活動を行うためにメールを送信するメーラー システムを作成しています。

以前のログイン日はデータベースに unixtimestamp で保存されているため、以下のようにコーディングしました。

  select email from myusers where WHERE DATE_ADD(FROM_UNIXTIME(prelogin), INTERVAL 30 DAY) < CURDATE()";

しかし、このコードは 30 日後、cron を 1 日 1 回実行するように設定しているため、ほぼ毎日連続してメールを送信しています。

4

1 に答える 1

1

30 日ごとにメールを送信するだけで、30 日間ログインしていない場合にのみ送信すると仮定すると、最も簡単な解決策はテーブルにlast_email_sent_time.

prelogin 次に、その新しい列の両方から少なくとも 30 日が経過した場合にのみ、メールを送信します。

そして、メールを送信するときは、その新しい列を現在の日付に更新して、もう 1 か月ほど迷惑をかけないようにします。


一方、ユーザーが 30 日間ログインしていない場合に1 回だけメールを送信したい場合も同様です。

メールが送信されたことを示す新しい列を作成し、その列が false (またはNそれを示すために使用したいもの) の場合にのみ送信します。送信するとその列が true に設定され、ログインすると false に設定されます (および を変更しますprelogin)。


余分な列を追加したくない場合(何らかの奇妙な理由で)、prelogin電子メールを送信するときに更新するだけで済みますが、他の場所で使用 (または有用) される可能性のある情報が失われるため、これはお勧めできません。

于 2012-04-30T13:35:55.263 に答える