Mysql查询重新索引项目

时间:2013-01-14 01:47:17

标签: php mysql

我有一个如下表,它有一个ID和项目名称,顺序和类型。

  +--------+----------------+-----------+---------+
  |  ID    |  ITEM          |   ORDER   |  TYPE   |
  +--------+----------------+-----------+---------+
  |  1     |  Banana        |    2      |  Fruit  |
  +--------+----------------+-----------+---------+
  |  2     |  Apple         |    1      |  Fruit  |
  +--------+----------------+-----------+---------+
  |  3     |  Orange        |    4      |  Fruit  |
  +--------+----------------+-----------+---------+
  |  4     |  Lemon         |    3      |  Fruit  |
  +--------+----------------+-----------+---------+

如果我要删除说LemonORDER将是1,2,4。有没有方法重新索引剩余的项目以获得以下结果?

  +--------+----------------+-----------+---------+
  |  ID    |  ITEM          |   ORDER   |  TYPE   |
  +--------+----------------+-----------+---------+
  |  1     |  Banana        |    2      |  Fruit  |
  +--------+----------------+-----------+---------+
  |  2     |  Apple         |    1      |  Fruit  |
  +--------+----------------+-----------+---------+
  |  3     |  Orange        |    3      |  Fruit  |
  +--------+----------------+-----------+---------+

2 个答案:

答案 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