我的标题可能有点偏离,但我不知道如何解释。
我目前正在制作一个照片组合,用户可以从网络界面上传图像。完成此操作后,将发生以下情况:
图像是通过HTML表单->PHP上传的。创建一个包含以下信息的SQL记录:
ID (Autoincrement) - Image title - Image Desc - Filepath
用户还可以通过网络界面中的另一个页面管理他们的上传。发生这种情况时,SQL记录将与文件一起删除。然而,当然后,用户添加一个新文件,使用下一个ID号,在数据库中留下一个空白区域,该空白区域是被删除的记录所在的位置。
我理解这是因为autoincrement不是用于向用户显示的ID,而是用于其他目的。然而,由于我使用这些信息在图像查看器中显示照片编号,我想要一种更合适的方法。我需要的基本上是一个包含int的MySQL列,它将填补删除记录时创建的空白。例如:
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_id
)来描述其编号是连续的图片集。
然而,话虽如此,如果你总是向用户显示一个序列号,为什么它需要存储在数据库中?当PHP代码对结果进行迭代时,只需在其中添加数字即可。
$sequence_number = 1;
while ($row = mysql_fetch_assoc($results)) {
// ... Display everything ...
$sequence_number++;
}
尝试:
SET @count = 0;
UPDATE `<table>` SET `<table>`.`<column>` = @count:= @count + 1;
上面的查询将循环并遍历每一行,并使用顺序整数更新<column>
字段。
这应该可以回答你的问题,但据我所知,你对图像查看器的问题可能完全不同,与自动增量问题无关。