删除行后重置数字序列

时间:2016-02-25 10:01:40

标签: php mysql

如果我有一个包含以下数据的用户列表:

+----+---------+----------+
| id | user    | sequence |
+----+---------+----------+
|  2 | dave    |     1    |
|  3 | sam     |     2    |
|  4 | harry   |     3    |
|  5 | sarah   |     4    |
+----+---------+----------+

如果我删除用户哈里,我想重新订购序列列给我以下内容:

+----+---------+----------+
| id | user    | sequence |
+----+---------+----------+
|  2 | dave    |     1    |
|  3 | sam     |     2    |
|  5 | sarah   |     3    |
+----+---------+----------+

我尝试了以下内容:

SET @i = 0;
UPDATE users
SET `sequence` = @i:=@i+1
ORDER BY `sequence` ASC;

如果我使用MySQL Workbench运行它可以工作。但是,当通过PHP方法mysql_query运行时,它失败并显示错误:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

如果我单独运行语句,它会起作用。这是一种安全的方法 - 它是否容易出问题?是否有解决方法或更好的方式来编写声明?

该应用程序未使用mysqli,因此我无法使用http://php.net/manual/en/mysqli.multi-query.php

1 个答案:

答案 0 :(得分:0)

失败是因为你尝试了multi_query。您可以使用http://php.net/manual/en/mysqli.quickstart.multiple-statement.php或尝试分离它。在这种情况下,我会把它放在一个交易中,然后它应该是安全的。 http://php.net/manual/en/mysqli.begin-transaction.php