php - 更新只有一列数据发生变化的表

标签 php mysql

我在 mysql 中有一个表,我正在尝试更改行的位置

|Id    |Content      |Position
------------------------------
|101   |"Yellow"     |1
|201   |"Red"        |2
|301   |"Blue"       |3 
|401   |"Black"      |4

成为这个

|Id    |Content      |Position
------------------------------
|101   |"Yellow"     |2
|201   |"Red"        |3
|301   |"Blue"       |1
|401   |"Black"      |4

我使用 PHP 更新此表,我拥有的唯一数据是更改的位置,例如,如果我想将黄色的位置更改为 3,我拥有的唯一数据是 3,所以我希望能够将 3 以下的所有内容重新排序为1,2 和超过 3 的所有内容都是 4,5.. 我唯一的数据是做这个改变是 3. 我该怎么做?应该使用 PHP 脚本还是 mysql 查询来完成?哪个更容易实现?

我试过了

"UPDATE table SET position = 3 WHERE position = 2"
"UPDATE table SET position = 2 WHERE position = 3"

这不会在声明中使用 ORDER BY,因为位置基本上是互换的。或许我必须在 mysql 中创建一个 tmp 变量来存储旧位置?

我更新了我的 api 端点,所以我基本上从 JavaScript 获得订单 并使用了 sql https://stackoverflow.com/a/15635201/4960941 .

而且有效。

我只使用位置作为保持 ajax 请求尽可能小的方法,但现在可以使用。以后有时间我会尝试优化。

最佳答案

也许我问错了,但你为什么不简单地这样做:

update your_table set Position = 0 where Position = 3;
update your_table set Position = Position + 1 where Position < 3;

最初没有 Position <= 0 的记录,对吗?这样就得到了你想要的结果。

关于php - 更新只有一列数据发生变化的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44455886/

相关文章:

php - Laravel 和远程挂载点 (sshfs)

php - 如何解决无效子查询返回超过 1 行的问题

MySql Insert ON Duplicate Key 并选择不起作用

php - 当我尝试使用 Silex 框架更改默认获取样式时,我得到 "MysqliException: Unknown fetch type ' FETCH_ASSOC'”

mysql - LEFT JOIN 语法上的 CASE 条件

javascript - 如何在HTML表单上实时显示错误? (包括 JavaScript)

php - preg_replace() 如何理解 $replacement 参数中的 '${1}1,$3'?

php - 写入 xml 文件时允许的内存大小为 67108864 字节耗尽(尝试分配 4459414 字节)

MySQL:如何检查每个组的哪些条目的值大于其相应组中的平均值?

php - 使用一页 URL 和搜索功能