如果超出最大值,则删除表中的旧行

时间:2013-09-15 17:55:45

标签: php mysql sql

当用户在我的网站上打开任何帖子时,我都会在表格中插入,这样我就可以实时“在网站上发生什么事情”

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

但现在有问题,因为每天有超过100K的点击量,这是每天在这个表中的100K新行,有任何方法可以将表限制为最多100行,如果超过max则删除旧的90并插入再次或类似的东西,不知道是什么是正确的方式来做这个

我的表 just_watched

ID - content_id

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

5 个答案:

答案 0 :(得分: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
}

More information on counting here. Then some more information on PDO here.

希望这有助于:)

祝你好运。

Also information on how to set up PDO if you haven't already.

我会做什么? :

每晚12点AM运行一个cron作业,删除过去一天的所有行。但这只是一些建议。有一个好的。

答案 1 :(得分:0)

使用此查询删除除最后100行之外的旧行:

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

您可以在每隔n个时段运行CRON(n =小时,或分钟,或任何)

答案 2 :(得分:0)

$numRows = mysql_num_rows(mysql_query("SELECT ID FROM just_watched"));
if ($numRows > 100){
mysql_query("DELETE FROM just_watched LIMIT 90");
}
mysql_query("INSERT INTO `just_watched` (`content_id`)  VALUES ('{$id}')");

我想这应该可以正常工作。

答案 3 :(得分: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';
}

另一种方法是在向表中添加新行时删除旧行。唯一的问题是,如果某些东西被堵塞,桌子可能会变大。

答案 4 :(得分:0)

您可以使用

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

因此,它会将偏移量100中的所有行删除为一个大数字(表格的末尾)。如果您在插入新查询之前总是运行此查询,那么它将为您完成这项工作。