例如,我有这个MySQL表:
======================================================
=ID= User = Message = Timestamp =
======================================================
= 1= user1234= Example Message= 1401959529=
= 2= krimson= Just a test hey= 1401959535=
= 3= boomhey= Don't mind that= 1401959537=
= 4= viceganda= I'm pretty= 1401959543=
= 5= annevhong= We don't really mind= 1401959544=
======================================================
ID
为AUTO_INCREMENT
的位置。我应该使用什么代码,以便当行变为 5 时第一行,并且我输入 6 th 行,第一行将被删除,所有行都将上升并将成为:
======================================================
=ID= User = Message = Timestamp =
======================================================
= 1= krimson= Just a test hey= 1401959535=
= 2= boomhey= Don't mind that= 1401959537=
= 3= viceganda= I'm pretty= 1401959543=
= 4= annevhong= We don't really mind= 1401959544=
= 5= newuser= newmessage= 1401959548=
======================================================
我也更喜欢使用PHP来实现这个目标。提前谢谢。
答案 0 :(得分:1)
简而言之:不要这样做
一行有ID,该ID是唯一标识符。没有更多,没有更少。这不是您记录的顺序(尽管实际上,较新的记录具有较高的ID)。如果您想要最后5条记录,请按降序对Timestamp
列的结果进行排序。如果要删除最旧的记录,请删除一条记录,按升序排序Timestamp
。
但不更改个人记录的ID(您的生日每年都不会更改您的姓名,是吗?;))。它会让你遇到各种各样的麻烦,比如评论中的人,与其他表格的关系等等。不要担心资源,也不要担心会达到整数限制(第一个拥有那么多普通整数列不够大的用户的网站尚未诞生......)
答案 1 :(得分:0)
永远不要试图改变主键。找到解决问题的其他方法。 根据我的说法,如果你想删除以前的消息,你必须这样做。 如果差异大于5则继续检查id然后删除上一行 希望它有所帮助
答案 2 :(得分:0)
首先,您需要从用户列表顶部删除用户,查询将是 -
DELETE FROM Users ORDER BY ID LIMIT 1
第二次更新所有记录ID就像这样 -
UPDATE Users SET ID = ID-1
第三次插入新行
INSERT INTO Users (ID, User, Message) VALUES ('6', 'newuser', 'newmessage')
答案 3 :(得分:0)
由于ID是自动增量和主要,因此不应该这样做。 如果你想这样做,那就试试吧..
$id=1;
mysql_query("Delect from TableName where ID=$id");
$qry = "SELECT * FROM TableName WHERE ID > ".$id." ORDER BY ID";
$res = mysql_query($qry) or die(mysql_error());
while($row = mysql_fetch_array($res))
{
mysql_query("UPDATE TableName SET ID = ".$id." WHERE ID = ".$row["ID"];
$id++;
}