小编典典

重新排列MySQL表中的行

sql

我有一张桌子:

+--------+-------------------+-----------+
| ID     | Name              |  Order    |
+--------+-------------------+-----------+
| 1      | John              | 1         |
| 2      | Mike              | 3         |
| 3      | Daniel            | 4         |
| 4      | Lisa              | 2         |
| 5      | Joe               | 5         |
+--------+-------------------+-----------+

可以通过管理员更改订单,因此可以更改订单列。在管理方面,我有一个带有选择框的表单,Insert After:用于输入数据库。在插入的列之后,我应该使用哪种查询来对+1进行排序。

我想以使服务器负载最小的方式执行此操作,因为此表当前有1200行。这是保存表顺序的正确方法还是有更好的方法?

任何帮助表示赞赏

编辑:

这是我想要做的,这要归功于itsmatt:

想要将第1行重新排序为第1100行之后,您打算将2-1100保留不变,然后将1修改为1101并递增1101-1200


阅读 211

收藏
2021-03-23

共1个答案

小编典典

您需要分两步执行此操作:

UPDATE MyTable 
   SET `Order` = `Order` + 1 
 WHERE `Order` > (SELECT `Order` 
                    FROM MyTable 
                   WHERE ID = <insert-after-id>);

…这会将每行的订单号移到列表下方,而不是您要插入的人。

然后:

INSERT INTO MyTable (Name, `Order`)
VALUES (Name, (SELECT `Order` + 1 FROM MyTable WHERE ID = <insert-after-id>));

要插入新行(假设ID为自动递增),其订单号比要插入的人多一个。

2021-03-23