首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将表限制为100行,然后删除最后一行并向顶部添加新的行(MYSQL,PHP)

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

Stack Overflow用户
提问于 2013-07-26 12:18:11
回答 2查看 2.6K关注 0票数 2

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

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

使用PHP或MYSQL查询的最佳方法是什么,我应该将num_rows与SELECT *结合使用吗?

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

编辑2: I正在考虑读取第100次查询的日期,然后删除每个日期<100次查询的记录,这是一个好做法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-26 12:21:59

代码语言:javascript
复制
$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_函数

我试过了,但它们对我不起作用:

代码语言:javascript
复制
DELETE FROM tablename WHERE user_id=123 LIMIT 100,9999

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

代码语言:javascript
复制
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)

但是子查询不支持限制(也许最近的版本支持,但我的不支持)

Marin Sagovac建议这样做,但也不适合我:

代码语言:javascript
复制
DELETE FROM tablename WHERE user_id=123 LIMIT 10 OFFSET 100
票数 2
EN

Stack Overflow用户

发布于 2013-07-26 12:59:59

像这样对你有用.

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

步骤1:

代码语言:javascript
复制
       $sql_com = "SELECT id FROM `mytable` WHERE roomid = '1'";

       $result = mysql_query ($sql_com); $num_rows = mysql_num_rows($result);   

第2步:

if ($num_rows > 3) {

代码语言:javascript
复制
      $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步:

代码语言:javascript
复制
     $sql_com = "DELETE FROM `mytable` WHERE roomid = '1' AND id < ".$row[0];

     $result = mysql_query ($sql_com);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17881106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档