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

时间:2012-08-28 17:10:36

标签: php mysql short

我所拥有的是一个包含元素的表格。每个元素都有一个唯一的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

1 个答案:

答案 0 :(得分:1)

应该足够简单。

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

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

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

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

    一个。如果你能找到一个项目,那就用它作为新的短标识(然后将其删除)

    湾如果bin为空,则将序列增加1并从中生成新的短ID。

  5. <强>更新

    这是创建和使用序列表的简单方法:

    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);