我有一张桌子:
+--------+-------------------+-----------+
| ID | Name | Order |
+--------+-------------------+-----------+
| 1 | John | 1 |
| 2 | Mike | 3 |
| 3 | Daniel | 4 |
| 4 | Lisa | 2 |
| 5 | Joe | 5 |
+--------+-------------------+-----------+
订单可以由管理员更改订单栏。在管理员方面,我有一个表单,其中包含对数据库条目的选择框Insert After:
。在插入的列之后,我应该使用什么查询来订购+ 1.
我想以这样的方式执行此操作,以便将服务器负载降至最低,因为此表目前有1200行。这是保存表格顺序的正确方法还是有更好的方法?
任何帮助表示赞赏
修改
这就是我想要做的,感谢它的匹配:
想要将第1行重新排序为第1100行之后,您计划将2-1100保留为相同,然后将1修改为1101并增加1101-1200
答案 0 :(得分:6)
您需要分两步完成此操作:
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为自动增量),订单号比您之后插入的人多一个。
答案 1 :(得分:1)
只需以任何正常方式添加新行,并让稍后的SELECT使用ORDER BY进行排序。根据MySQL标准,1200行是无限小的。您真的不必(并且不希望)保持物理表排序。而是使用键和索引来访问表,以便为您提供所需的内容。
答案 2 :(得分:-2)
你可以
insert into tablename (name, `order`)
values( 'name', select `order`+1 from tablename where name='name')
您也可以在内部选择中使用id = id_val。
希望这就是你所追求的,这个问题并不完全清楚。