php - 删除行后重置数字序列

标签 php mysql

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

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

如果我删除用户 harry,我想重新排序序列列以提供以下内容:

+----+---------+----------+
| 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它失败并出现错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解使用近的正确语法

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

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

最佳答案

它失败了,因为您尝试了多重查询。你也许可以使用 http://php.net/manual/en/mysqli.quickstart.multiple-statement.php或尝试将其分开。在这种情况下,我会将其放入交易中,那么它应该是安全的。 http://php.net/manual/en/mysqli.begin-transaction.php

关于php - 删除行后重置数字序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35624020/

相关文章:

javascript - laravel中如何用ajax删除图片

javascript - WordPress 的动态行简码

java - 连接 JDBC SQL 错误

mysql - 获取有关一个表中所有行的信息(当该行不在联接表中时)

php - 是否有一个 "automated"过程可以在整个代码中更改 SQL 列名称?

php - 获取刚刚使用 MySQL 插入的行的自动编号 ID

javascript - 更新我的 session 变量

php - 重命名上传的图像不起作用

mysql - 解释计划 : what is the difference between "using where" and "using index" in MYSQL

mysql - 按年循环多个数组