【发布时间】:2014-05-16 16:10:09
【问题描述】:
要求是找到第一个可用的标识符,其中标识符是字母数字字符串,例如:
ABC10000
ABC10345
ABC88942
ABC90123
数据库表的结构如:
id, user, identifier
请注意,alpha 组件ABC 始终保持一致,不会改变。数字部分应介于 10000 和 99999 之间。
如何最好地解决这个问题?这似乎不是一个过于复杂的问题 - 使用 MySQL 或 SQL 和 PHP 的组合寻找最简单的解决方案。当前的解决方案将数据库中的每条记录拉入一个数组,然后从 10000 开始循环,在前面加上 ABC 并检查可用性,这似乎可以显着改善。
编辑:最初的问题不够清楚,因为已经分配了一定数量的标识符,我正在寻找填补空白。从我提供的短名单中,下一个可用的是 ABC10001。然而,最终会是 ABC10346,然后是 ABC88943,以此类推
编辑:对于一个结构不佳的问题,我们深表歉意。为避免进一步混淆,以下是实际的表结构:
CREATE TABLE IF NOT EXISTS `User_Loc` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user` int(11) DEFAULT NULL,
`value` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UNIQ_64FB41DA17323CBC` (`user`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4028 ;
【问题讨论】:
-
总是最后的记录吗?或者您可能会在值之间拥有免费 id,即 abc10000、abc10002 并且您需要 10001?
-
谢谢 - 我已经在上面澄清了。它是第一个可用的“缺失”标识符。
-
@HerrSerker - 这是一个不好的评论。也许标识符是一个糟糕的选择(实际上,字段名称是
value)。如果您愿意详细说明?
标签: php mysql unique identifier alphanumeric