我所拥有的是一个包含元素的表。每个元素都有一个唯一的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
应该足够简单。
-
使用回收的短ID 创建新表
-
创建另一个(序列)表,保存用于生成短id 的最后一个id
-
当短id被自定义id替换时,将其插入回收站
-
当你需要创建一个新的短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);