我在数据库中有一个记录ip地址的表。
我需要为每个用户拥有最多的o 100条记录,如果用户达到100条记录并将新记录添加到顶部(最新的),则删除最后一条记录。
使用PHP或MYSQL查询的最佳方法是什么,我应该将num_rows与SELECT *结合使用吗?
编辑:我需要限制记录数据库中每个用户的I,而不是限制显示它们(每个用户不能在数据库中有超过100个I)
编辑2: I正在考虑读取第100次查询的日期,然后删除每个日期<100次查询的记录,这是一个好做法吗?
发布于 2013-07-26 12:21:59
$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_函数
我试过了,但它们对我不起作用:
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)但是子查询不支持限制(也许最近的版本支持,但我的不支持)
Marin Sagovac建议这样做,但也不适合我:
DELETE FROM tablename WHERE user_id=123 LIMIT 10 OFFSET 100发布于 2013-07-26 12:59:59
像这样对你有用.
删除1号房间的旧评论(保留最后3个左)
步骤1:
$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) {
$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);https://stackoverflow.com/questions/17881106
复制相似问题