更新只包含一列更改

时间:2017-06-09 10:50:28

标签: 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请求尽可能小的手段,但现在这样做。我有空的时候会尝试优化。

1 个答案:

答案 0 :(得分:0)

也许我的问题不对,但为什么不这样做呢:

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

最初没有位置&lt; = 0的记录,对吧?然后这会得到你想要的结果。