【发布时间】:2017-11-11 08:37:06
【问题描述】:
我在 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 更新此表,我拥有的唯一数据是更改的位置,例如,如果我想将 Yellow 的位置更改为 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 请求尽可能小的一种手段,但目前这可行。有时间我会尝试优化。
【问题讨论】:
-
你经常换职位吗?如果是这样,您可以对 PHP 文件进行更新查询。
-
是的,职位不断变化。我可以访问的唯一数据是通过 PHP 更改的位置。我遇到的 PHP 问题是会有相同位置的行,我需要将一行移到另一行的上方或下方。
-
如果将 Yellow 更改为 3,那么我的意思是“红色”的当前元素呢?它会交换还是做其他事情?
-
是元素红色位置将在更改之前更改为黄色位置。