在MySQL中删除时管理唯一ID

时间:2012-07-09 12:36:30

标签: php mysql

我的头衔可能有些偏差,但我不确定如何解释。

我目前正在制作用户可以使用的照片组合 从Web界面上传图像。完成后,会发生以下情况:

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

ID (Autoincrement) - Image title - Image Desc - Filepath

用户还可以通过Web界面中的其他页面管理他们的上传。 发生这种情况时,SQL记录将与文件一起删除。但是,当 然后,用户添加一个新文件,使用下一个ID号,使数据库留下一个空白区域,其中删除的记录曾经是。

我理解这是因为自动增量不能用于显示给用户的ID,而是用于其他目的。但是,由于我是使用此信息在图像查看器中显示照片编号,我想要一个更合适的方法。我需要的是一个包含整数的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

有什么建议吗?

感谢您的帮助。 : - )

2 个答案:

答案 0 :(得分:2)

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++;
}

答案 1 :(得分:0)

尝试:

SET @count = 0;
UPDATE `<table>` SET `<table>`.`<column>` = @count:= @count + 1;

上面的查询将循环并遍历每一行并使用顺序整数更新<column>字段。

这应该回答你的问题,但据我了解,你对图像查看器的问题可能是完全不同的,与自动增量问题无关。