当用户在我的网站上打开任何帖子时,我都会在表格中插入,这样我就可以实时“在网站上发生什么事情”
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)
答案 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
中的所有行删除为一个大数字(表格的末尾)。如果您在插入新查询之前总是运行此查询,那么它将为您完成这项工作。