0

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

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

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

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

用户还可以通过 Web 界面中的另一个页面管理他们的上传。发生这种情况时,SQL 记录与文件一起被删除。但是,当用户随后添加一个新文件时,将使用下一个 ID 号,从而在数据库中留下一个空白空间,该空间位于删除记录的位置。

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

有什么建议么?

谢谢你的帮助。:-)

4

2 回答 2

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++;
}
于 2012-07-09T12:40:07.433 回答
-1

尝试:

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

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

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

于 2012-07-09T12:43:49.570 回答