我有一个如下表,它有一个ID和项目名称,顺序和类型。
+--------+----------------+-----------+---------+
| ID | ITEM | ORDER | TYPE |
+--------+----------------+-----------+---------+
| 1 | Banana | 2 | Fruit |
+--------+----------------+-----------+---------+
| 2 | Apple | 1 | Fruit |
+--------+----------------+-----------+---------+
| 3 | Orange | 4 | Fruit |
+--------+----------------+-----------+---------+
| 4 | Lemon | 3 | Fruit |
+--------+----------------+-----------+---------+
如果我要删除说Lemon
,ORDER
将是1,2,4。有没有方法重新索引剩余的项目以获得以下结果?
+--------+----------------+-----------+---------+
| ID | ITEM | ORDER | TYPE |
+--------+----------------+-----------+---------+
| 1 | Banana | 2 | Fruit |
+--------+----------------+-----------+---------+
| 2 | Apple | 1 | Fruit |
+--------+----------------+-----------+---------+
| 3 | Orange | 3 | Fruit |
+--------+----------------+-----------+---------+
答案 0 :(得分:3)
没有办法完全自动完成,但这样做很简单。假设ORDER
不是唯一的,那么它会更容易,但如果是,则必须首先检索ORDER
的“柠檬”。然后,就这样做:
UPDATE Fruit SET ORDER = ORDER - 1 WHERE ORDER > ?
其中?
是Lemon的ORDER
。
假设ORDER
不是唯一的,那么您可以事先执行此查询,但是您可以加入Fruit
选择Lemon的订单来替换?
。
答案 1 :(得分:3)
在您删除Lemon
行之前 - 检查其ORDER
列值是什么。
之后执行
UPDATE tbl SET `ORDER` = `ORDER` - 1 WHERE `ORDER` > value_lemon_had