1

互いに一定時間内にタイムスタンプが付けられたレコードを選択するにはどうすればよいでしょうか?

アプリケーションと求めるソリューション:

クリックの記録を含むテーブルがあり、特定の期間内に発生した同じ IP からのクリックを調べたいと考えています。

例: SELECT ALL ip_address WHERE 5 つ以上の同じ ip_address が、互いに 10 分以内に発生/グループ化/タイムスタンプされている

4

2 に答える 2

1

そのようなレコードを選択できます

$recorddate = date("Y-m-d");
SELECT * FROM table WHERE date > UNIX_TIMESTAMP('$recorddate');

UNIX_TIMESTAMP 関数は、日付をタイムスタンプに変換します。また、クエリで簡単に使用できます。

10分間隔でレコードを取得したい場合は、そのようなことができます

$starttime = "2012-08-30 19:00:00";
$endtime   = "2012-08-30 19:10:00";
SELECT * FROM table WHERE date >= UNIX_TIMESTAMP('$starttime') AND date <= UNIX_TIMESTAMP('$endtime') ;
于 2012-08-29T22:50:44.100 に答える
0

生データに対して単一のクエリを試行しないことにしました。

友人と話し合った後、メモリ エンジンと PHP memcatch に言及しているオプションについて読みました。Time to Live タイムスタンプを使用してクリック数を記録する通常のテーブルを使用することにしました。そのタイムスタンプが渡された後、新しい ttl が割り当てられ、カウントが再設定されます。1 つのことは、私のアプリケーションでは、パラメーター構成設定がどれくらいの長さになるか正確にはわかりません。設定が大きくなり、メモリがクリアされると、最初からやり直します。

ユーザー リンクのクリックで実行される場合、これは完璧なソリューションではありませんが、クリック詐欺の嵐を捕らえ、仕事をすることについてはかなり良いはずです。

PHP/MySQL コードの管理 (「Drupalized クエリ」):

$timeLimit = $clickQualityConfigs['edit-submitted-within-x-num-of-same-ip-clicks']." ".$clickQualityConfigs['edit-submitted-time-period-same-ip-ban']; // => 1 days // e.g.
$filterEndTime = strtotime("+".$timeLimit);

$timeLimitUpdate_results = db_query('UPDATE {ip_address_count} 
SET ttl_time_stamp = :filterendtime, click_count = :clickcountfirst WHERE ttl_time_stamp < :timenow', array(':filterendtime' => $filterEndTime, ':clickcountfirst' => '0', ':timenow' => time()));

$clickCountUpdate_results = db_query('INSERT INTO {ip_address_count} (ip_address,ttl_time_stamp,click_count) 
VALUES (:ipaddress,:timestamp,:clickcountfirst) 
ON DUPLICATE KEY UPDATE click_count = click_count + 1', array(':ipaddress' => $ip_address,':timestamp' => $filterEndTime,':clickcountfirst' => '1'));

データベース情報:

CREATE TABLE `ip_address_count` (
   `ip_address` varchar(24) NOT NULL DEFAULT '',
   `ttl_time_stamp` int(11) DEFAULT NULL,
    `click_count` int(11) DEFAULT NULL,
 PRIMARY KEY (`ip_address`)
)
于 2012-09-02T00:18:34.293 に答える