1

我所拥有的是一张带有元素的表格。每个元素都有一个唯一的id和一个唯一的short 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 丢失。

所以每个自定义的short都会导致id“太超前”有什么办法可以解决这个问题吗?在mysql或php中。

完美的是:

10=> a
37=> B
38=> foobar
39=> C
40=> FUBAR
41=> D

更新:(可能的三排方法)

仅当生成短 ID 而不是定制时,“已使用”行才会增加。这样,可以始终使用“已使用”行生成短 ID。例如:

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

1 回答 1

1

应该足够简单。

  1. 使用回收的短 id 创建一个新表

  2. 创建另一个(序列)表,其中包含用于生成短 id 的最后一个 id

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

  4. 当您需要创建新的短 id 时,请先查看回收站。

    一种。如果您能找到一个项目,请将其用作新的短 ID(然后将其删除)

    湾。如果 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);
于 2012-08-29T03:22:53.673 回答