删除第一行并向上移动所有行

时间:2014-06-05 09:18:13

标签: php mysql

例如,我有这个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=
======================================================

IDAUTO_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来实现这个目标。提前谢谢。

4 个答案:

答案 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++;
}