0

ユーザーがサイトの投稿を開いたときにいつでもテーブルに挿入します。このようにして、「サイトで何が起こったのか」をリアルタイムで取得します

mysql_query("INSERT INTO `just_watched` (`content_id`)  VALUES ('{$id}')");

しかし、毎日100Kを超えるヒットがあるため、これは毎日このテーブルの100Kの新しい行であり、テーブルを最大100行に制限する方法があり、最大を超えた場合は古い90を削除して再度挿入するなどの問題がありますそのように、これを作る正しい方法が何であるかわかりません

私のテーブル

ID - content_id

ID INT(11) - AUTO_INCREMENT
content_id INT(11)

4

5 に答える 5

1

私の頭に浮かんだ最も簡単な方法は、php ロジックを使用して情報を削除および挿入することです。次に、ユーザーが新しい投稿を開くたびに、データベースのカウントを追加します。(これはあなたがすでにやっている)

新しいものがここに来る

挿入前にコントロールを入力します。つまり、何かが挿入される前に、最初にすべての行を数え、100 行を超えない場合は新しい行を追加します。

100 行を超える場合は、新しい行を挿入する前に、最初に削除ステートメントを実行してから、新しい行を挿入します。

例 (sudo コード):

$sql = "SELECT COUNT(*) FROM yourtable";
$count = $db -> prepare($sql);
$count -> execute();

if ($count -> fetchColumn() >= 100) { // If the count is over a 100
    ............... //Delete the first 90 leave 10 then insert a new row which will leave you at 11 after the delete.
} else {
    .................. // Keep inserting until you have 100 then repeat the process
}

カウントの詳細については、こちらをご覧ください。 次に、PDO の詳細については、こちらを参照してください。

うまくいけば、これは役に立ちます:)

幸運を。

PDO をまだ設定していない場合は、その設定方法についても説明します。

私は何をしますか?:

毎晩午前 12:00 に、過去 1 日のすべての行を削除する cron ジョブを実行します。しかし、それは単なるアドバイスです。良いものを持っている。

于 2013-09-15T18:08:05.693 に答える
0

テーブル内の行数は、次の方法で取得できます。

$size = mysql_num_rows($result);

テーブルのサイズを使用して、大きくなっているかどうかを確認し、90 行を削除できます。

// Get 90 lines of code
$query = "Select * FROM just_watched ORDER BY id ASC LIMIT 90";
$result = mysql_query($query);
// Go through them
while($row = mysql_fetch_object($result)) {
  // Delete the row with the id
  $id = $row['id'];
  $sql = 'DELETE FROM just_watched
    WHERE id=$id';
}

別の方法は、テーブルに新しい行を追加する場合に古い行を削除することです。唯一の問題は、何かが詰まった場合、テーブルが大きくなる可能性があることです.

于 2013-09-15T18:04:36.510 に答える
0

あなたは使用することができます

DELETE FROM just_watched ORDER BY id DESC LIMIT 100, 9999999999999999;

100そのため、オフセットから大きな数までのすべての行を削除します(テーブルの最後)。新しいクエリを挿入する前に常にこのクエリを実行すると、そのクエリが自動的に実行されます。

于 2013-09-15T18:07:31.410 に答える
0

次のクエリを使用して、最後の 100 行を除く古い行を削除します。

DELETE FROM  just_watched where 
ID not in (SELECT id fromjust_watched order by ID DESC LIMIT 100)

n期間ごとにCRONで実行できます。ここで、(n =時間、または分、または任意)

于 2013-09-15T18:03:51.970 に答える