Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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中管理删除时的唯一ID_Php_Mysql - Fatal编程技术网

Php 在MySQL中管理删除时的唯一ID

Php 在MySQL中管理删除时的唯一ID,php,mysql,Php,Mysql,我的标题可能有点不对劲,但我不知道该如何解释 我目前正在制作一个照片组合,用户可以 从web界面上载图像。完成此操作后,将发生以下情况: 图像通过HTML表单->PHP上传。 将创建包含以下信息的SQL记录: ID (Autoincrement) - Image title - Image Desc - Filepath 用户还可以通过web界面中的另一个页面管理其上载。 发生这种情况时,SQL记录将与文件一起删除。然而,当 然后,用户添加一个新文件,使用下一个ID号,将数据库中的已删除记录保

我的标题可能有点不对劲,但我不知道该如何解释

我目前正在制作一个照片组合,用户可以 从web界面上载图像。完成此操作后,将发生以下情况:

图像通过HTML表单->PHP上传。 将创建包含以下信息的SQL记录:

ID (Autoincrement) - Image title - Image Desc - Filepath
用户还可以通过web界面中的另一个页面管理其上载。 发生这种情况时,SQL记录将与文件一起删除。然而,当 然后,用户添加一个新文件,使用下一个ID号,将数据库中的已删除记录保留在原来的空白处

我理解这是因为autoincrement不用于显示给用户的ID,而是用于其他目的。但是,由于我正在使用此信息在图像查看器中显示照片编号,因此我希望采用更合适的方法。我需要的基本上是一个MySQL列,其中包含int,可以填补删除记录时创建的空白。例如:

1 - 2 - 3 - 4 - 5 - 6 - 7 - 8
在删除记录5时,我需要ID来填补空白,因此我将

1 - 2 - 3 - 4 -   - 6 - 7 - 8
得到 1-2-3-4-5-6-7

有什么建议吗


谢谢你的帮助。:-)

MySQL没有一个很好的工具来自动完成这项工作,但您可以通过以下方式手动完成:

SELECT sequence_number FROM photo WHERE photo_id = 729; -- This would be 5.
DELETE FROM photo WHERE photo_id=729;
UPDATE photo SET sequence_number = sequence_number - 1 WHERE sequence_number > 5;
UPDATE
查询可以包括任何其他条件(例如,匹配的
album\u id
)来描述其数字是连续的图片集

但是,尽管如此,如果您总是向用户显示一个序列号,那么为什么它需要存储在数据库中呢?当PHP代码在结果上迭代时,只需在那里添加数字

$sequence_number = 1;
while ($row = mysql_fetch_assoc($results)) {
    // ... Display everything ...
    $sequence_number++;
}
尝试:

SET@count=0;
更新``SET`.`=@count:=@count+1;
上面的查询将循环并遍历每一行,并用一个连续整数更新
字段


这应该可以回答您的问题,但据我所知,您与图像查看器的问题可能完全不同,与自动增量问题无关

这听起来像是一个与数据库无关的显示问题。当您输出图像时,是否可以不考虑其在数据库中的id而简单地对其进行编号?这将修改实际的
主键
/
自动增量
,这是非常不鼓励的。这里的问题是如何修改专门用于此目的的单独列。正如我所描述的:这正是我试图避免的,以及任何修改建议。不过,谢谢你的建议!如果我理解正确,那就是正确的方法。(一定要确保在您有
idvariable
的地方,您使用的是参数化查询,或者至少是
mysql\u real\u escape\u string
,以确保您没有直接将
$\u GET
参数注入查询。),
5
在任何情况下都必须是变量,因为您显然不会每次都删除同一张照片。
SET @count = 0;
UPDATE `<table>` SET `<table>`.`<column>` = @count:= @count + 1;