Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 重新索引项目的Mysql查询_Php_Mysql - Fatal编程技术网

Php 重新索引项目的Mysql查询

Php 重新索引项目的Mysql查询,php,mysql,Php,Mysql,我有一个如下表,它有一个ID和项目名称,顺序和类型 +--------+----------------+-----------+---------+ | ID | ITEM | ORDER | TYPE | +--------+----------------+-----------+---------+ | 1 | Banana | 2 | Fruit | +--------+----

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

  +--------+----------------+-----------+---------+
  |  ID    |  ITEM          |   ORDER   |  TYPE   |
  +--------+----------------+-----------+---------+
  |  1     |  Banana        |    2      |  Fruit  |
  +--------+----------------+-----------+---------+
  |  2     |  Apple         |    1      |  Fruit  |
  +--------+----------------+-----------+---------+
  |  3     |  Orange        |    4      |  Fruit  |
  +--------+----------------+-----------+---------+
  |  4     |  Lemon         |    3      |  Fruit  |
  +--------+----------------+-----------+---------+
如果我删除,比如说
Lemon
顺序将是1,2,4。是否有一种方法来重新索引剩余的项目以获得以下结果

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

没有办法完全自动完成这项工作,但这相当简单。假设
ORDER
不是唯一的,则更容易,但如果是唯一的,则必须首先检索“Lemon”的
ORDER
。那么,只要做:

UPDATE Fruit SET ORDER = ORDER - 1 WHERE ORDER > ?
其中
是Lemon的
订单


假设
ORDER
不是唯一的,那么您可以事先执行此查询,但您可以在删除
Lemon
行之前加入选择Lemon的ORDER以替换

,检查其
ORDER
列值

然后表演

UPDATE tbl SET `ORDER` = `ORDER` - 1 WHERE `ORDER` > value_lemon_had

id是唯一的id吗?如果是这样的话,我强烈建议不要更改它,尤其是在表中的所有项目上。Id是唯一的并且是自动的。我只需要重新索引订单好吧,我看错了。随身携带:-)