4

phpとmysqlを使用してWebサービスを構築していますが、各apikeyからのリクエストを(y)時間以内に(x)量に制限したいと思います。

これを実現するために、次のようなSQLステートメントを使用して、期間内に各apikeyからログに追加されたレコードをカウントします。

SELECT COUNT(*) FROM ws_account_log WHERE account_log_account_id='1' AND account_log_timestamp > DATE_SUB(now(), INTERVAL 1 HOUR)

これにより、1時間ごとのローリングカウントが得られます。これは問題ありませんが、1か月あたりのカウントに厳しい制限を設けたいと思います。たとえば、当月の初日の00:00以降に追加された行数。

ストアドプロシージャとさまざまな構文を使用した例を見てきましたが、MYSQLで機能する回答をお願いします。また、可能であれば、サービスの1つがオートコンプリート機能を提供するため、最速の実装であるため、ログテーブルはかなり大きくなります。

ありがとう

4

2 に答える 2

5
SELECT COUNT(*)
FROM ws_account_log
WHERE
      account_log_account_id='1'
  AND account_log_timestamp >= SUBDATE(CURDATE(), DAYOFMONTH(CURDATE())-1)
于 2012-04-29T10:49:05.283 に答える
0

phpを使用してタイムスタンプを計算し、それをmysqlクエリに渡します。

$date = mktime(0, 0, 0, date("n"), 1, date("Y"));
$mysqldate = date( 'Y-m-d H:i:s', $date );
$query = " ... AND account_log_timestamp > ".$mysqldate;
于 2012-04-29T10:44:50.357 に答える