我在 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/