我所拥有的是一个包含元素的表格。每个元素都有一个唯一的id和一个唯一的短ID,称为short。它看起来像如下:
id=>short
1 => 1
9 => 9
10=> a
37=> B
等。短ID是通过php函数生成的。
我现在要做的是让用户设置自己的自定义短片。 让我们说第38位用户希望他的短片成为“foobar”。简单的解决方案是:
10=> a
37=> B
38=> foobar
39=> D
但是那样我会失去C。如果许多用户决定使用自定义短ID,那么最终会丢失许多短ID。
因此,每个自定义短片都会导致ID“太远”,有没有办法解决这个问题?无论是在mysql还是php。
完美将是:
10=> a
37=> B
38=> foobar
39=> C
40=> FUBAR
41=> D
更新:(可能的三排方法)
行“used”仅在生成短ID且未自定义时才会增加。这样,总是可以使用“used”行生成短ID。例如:
id | short | used
10 | a | 10
37 | B | 37
38 | foobar | 37
39 | C | 38
40 | FUBAR | 38
41 | D | 39
答案 0 :(得分:1)
应该足够简单。
使用回收的短ID创建新表
创建另一个(序列)表,其中包含用于生成短ID的最后一个ID
当短ID被自定义ID替换时,将其插入回收站
当您需要创建新的短ID时,请先查看回收站。
一个。如果你能找到一个项目,那就用它作为新的短标识(然后将其删除)
湾如果bin为空,则将序列增加1并从中生成新的短ID。
<强>更新强>
这是创建和使用序列表的简单方法:
CREATE TABLE seqname (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE=MyISAM SELECT 0 AS id;
UPDATE seqname SET id=LAST_INSERT_ID(id+1);