我有一张桌子:
+--------+-------------------+-----------+ | ID | Name | Order | +--------+-------------------+-----------+ | 1 | John | 1 | | 2 | Mike | 3 | | 3 | Daniel | 4 | | 4 | Lisa | 2 | | 5 | Joe | 5 | +--------+-------------------+-----------+
可以通过管理员更改订单,因此可以更改订单列。在管理方面,我有一个带有选择框的表单,Insert After:用于输入数据库。在插入的列之后,我应该使用哪种查询来对+1进行排序。
Insert After:
我想以使服务器负载最小的方式执行此操作,因为此表当前有1200行。这是保存表顺序的正确方法还是有更好的方法?
任何帮助表示赞赏
编辑:
这是我想要做的,这要归功于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>);
…这会将每行的订单号移到列表下方,而不是您要插入的人。
然后:
INSERT INTO MyTable (Name, `Order`) VALUES (Name, (SELECT `Order` + 1 FROM MyTable WHERE ID = <insert-after-id>));
要插入新行(假设ID为自动递增),其订单号比要插入的人多一个。