对 MySQL 表中的行重新排序

2023-12-04

我有一张桌子:

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

管理员可以更改订单,因此订单栏也可以更改。在管理端,我有一个带有选择框的表单Insert After:到数据库的条目。我应该使用什么查询在插入的列之后排序+1。

我希望以一种将服务器负载降至最低的方式来执行此操作,因为该表目前有 1200 行。这是保存表顺序的正确方法还是有更好的方法?

任何帮助表示赞赏

EDIT:

这就是我想做的,感谢 itsmatt:

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


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

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

...这会将列表中每行的订单号移到比您要插入的人更靠下的位置。

Then:

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

插入新行(假设 ID 自动递增),其订单号比要插入的人的订单号大 1。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对 MySQL 表中的行重新排序 的相关文章

随机推荐