将表限制为100行,然后删除最后一行并在顶部添加新行(MYSQL、PHP)


Limit table to 100 rows, after that delete the last and add new one to the top (MYSQL , PHP)

我在数据库中有一个表,记录ip地址

我需要每个用户最多有100条记录,然后如果用户达到100条记录则删除最后一条记录,并将新记录添加到顶部(最新)

使用PHP或MYSQL QUERY最好的方法是什么?我应该将num_rowsSELECT *一起使用吗?

编辑:我需要限制在数据库中记录每个用户的IP,而不是限制显示它们(每个用户在数据库中不能有超过100个IP)

第2版:我想读取第100个查询的日期,然后删除每个日期<第100个问题,这是一个好的做法吗?

$result = mysql_query("SELECT id FROM tablename WHERE user_id=123 ORDER BY id DESC LIMIT 100,1");
$fetch = mysql_fetch_assoc($result);
mysql_query("DELETE FROM tablename WHERE id <".$fetch['id']." AND user_id=123");

当你谈论选择日期时,总是尽量选择最快的专栏。您的id列可能是auto_increment,并且有一个索引,这使它成为一个快速列。日期值可能未编入索引,因此速度较慢
小提示:我使用的是mysql_函数,您应该使用mysqli_functions


我试过这些,但(对我来说)不起作用:

DELETE FROM tablename WHERE user_id=123 LIMIT 100,9999

我想尝试的另一种方法是:

DELETE FROM tablename WHERE user_id=123 
WHERE id NOT IN(SELECT id FROM tablename WHERE user_id=123 ORDER BY id DESC LIMIT 100)

但是子查询不支持限制(也许最近的版本支持,但我的不支持)
马林·萨戈瓦茨提出了这个建议,但对我来说也不起作用:

DELETE FROM tablename WHERE user_id=123 LIMIT 10 OFFSET 100

试着这样做对你有用。。。。。

删除1号房间的旧评论(保留最后3条)

步骤1:

       $sql_com = "SELECT id FROM `mytable` WHERE roomid = '1'";
       $result = mysql_query ($sql_com); $num_rows = mysql_num_rows($result);   

步骤2:

如果($num_rows>3){

      $sql_com = "SELECT id FROM `mytable` WHERE roomid = '1' ORDER BY id DESC LIMIT 3,1"; 
      $result = mysql_query ($sql_com);
     $row = mysql_fetch_array($result, MYSQL_NUM);

}

步骤3:

     $sql_com = "DELETE FROM `mytable` WHERE roomid = '1' AND id < ".$row[0];
     $result = mysql_query ($sql_com);