3

ユーザーが Web サイトを使用してメールを送信できるようにしているが、1 日 (24 時間) に 30 通以上のメールを送信しないように制限したいとします。

したがって、各メールを送信することでテーブルにレコードを挿入し、別のレコードを送信しようとしている間に、24 時間以内に 30 通を超えるメールを送信したかどうかを確認します。

これを PHP で確認するにはどうすればよいでしょうか。

データベースにクエリを実行すると、このユーザーの 20 件のレコードが取得され、レコードの日付は次のようになります。

2012-08-14 13:10:58
2012-08-14 12:45:47
2012-08-14 16:32:18
2012-08-14 19:10:40
...
...
...

どうすればそのようなルールを達成できるでしょうか?

ありがとう

4

1 に答える 1

5

PHPでチェックしないでください。このような単純なクエリを使用して、データベースからすぐに答えを取得してください。

select 
    count(*) 
from 
    yourTableName 
where 
    dateCol>date_sub(now(), interval 1 day) 
    and userID=...

これにより、カウントが得られます。

編集: Boris が指摘しているように、これは 1 日あたりにカウントされます。次のように、過去 24 時間の期間を確認するように変更できます。

select 
    count(*) 
from 
    yourTableName 
where 
    dateCol>date_sub(now(), interval 24 hour) 
    and userID=...

編集 2: これを確認した後、Riad は正確に指摘しています。これら 2 つは実際には同じ値を返します。は1 day、暦日ではなく、正確に 1 日として扱われます。日付列の日時が「2012-08-13: 13:00:00」の場合、「2012-08-12: 13:00:00」date_sub( dateCol, interval 1 day)が返されます。

于 2012-08-14T09:10:24.403 に答える