我有一张桌子:
+--------+-------------------+-----------+
| 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(使用前将#替换为@)