2

我有一个如下表,它有一个 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  |
  +--------+----------------+-----------+---------+
4

2 回答 2

3

没有办法完全自动地做到这一点,但它会相当简单。假设这ORDER不是唯一的,那就更容易了,但如果是,你必须先检索ORDER“柠檬”。然后,只需执行以下操作:

UPDATE Fruit SET ORDER = ORDER - 1 WHERE ORDER > ?

?柠檬店在哪里ORDER

假设ORDER不是唯一的,那么您可以事先进行此查询,但您将加入Fruit选择 Lemon's order to replace ?

于 2013-01-14T01:50:53.413 回答
3

在您删除该Lemon行之前 - 检查它的ORDER列值是什么。

之后执行

UPDATE tbl SET `ORDER` = `ORDER` - 1 WHERE `ORDER` > value_lemon_had
于 2013-01-14T01:51:00.627 回答