我在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请求尽可能小的手段,但现在这样做。我有空的时候会尝试优化。
答案 0 :(得分:0)
也许我的问题不对,但为什么不这样做呢:
update your_table set Position = 0 where Position = 3;
update your_table set Position = Position + 1 where Position < 3;
最初没有位置&lt; = 0的记录,对吧?然后这会得到你想要的结果。