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 行,那么在插入新行之前,首先执行删除语句,然后插入新行。

示例(须藤代码):

$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,还有关于如何设置 PDO 的信息。

我会怎么做?:

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

于 2013-09-15T18:08:05.693 回答
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 回答
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}')");

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

于 2013-09-15T18:04:23.287 回答
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 回答