短的唯一id与自定义id混合


short unique id mixed with custom id

我所拥有的是一个包含元素的表。每个元素都有一个唯一的id和一个唯一短id,称为short。例如,它看起来如下:

id=>short
1 => 1
9 => 9
10=> a
37=> B

等等。短id是通过php函数生成的。

我现在想做的是让用户设置自己的自定义short。假设第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

更新:(可能的三排进近)

当生成短id而不是自定义时,行"used"只会增加。这样,短id总是可以使用"used"行生成。例如:

id  |  short  |  used
10  |  a      |  10
37  |  B      |  37
38  |  foobar |  37
39  |  C      |  38
40  |  FUBAR  |  38
41  |  D      |  39

应该足够简单。

  1. 使用回收的短ID 创建新表

  2. 创建另一个(序列)表,保存用于生成短id 的最后一个id

  3. 当短id被自定义id替换时,将其插入回收站

  4. 当你需要创建一个新的短id时,首先查看回收站。

    a。如果你能找到一个项目,用它作为新的短id(然后删除它)

    b。如果bin为空,则将序列增加一,并由此生成一个新的短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);