php - 基于地区的唯一代码

标签 php mysql

我必须为每个注册用户创建一个唯一代码。问题是需要根据用户来自哪个城市来生成唯一代码。 所以我的表是:

CREATE TABLE `microreg`.`users` ( `user_id` INT NOT NULL
AUTO_INCREMENT , `user_code` CHAR(10) NOT NULL , PRIMARY KEY (`user_id`),
UNIQUE (`user_code`));

user_id用于DB中用户的唯一标识。
user_code 是 为用户使用而生成的可读代码。他们访问他们的 使用该唯一代码的帐户。

CREATE TABLE `microreg`.`districts` ( `district_id` INT NOT NULL
AUTO_INCREMENT , `district_name` VARCHAR(50) NOT NULL , `district_code`
CHAR(4) NOT NULL , PRIMARY KEY (`district_id`), UNIQUE (`district_code`));`

这包含分配了唯一代码的大约 20K 个区。

说,

Trichy      ITRY
Coimbatore  ICBE
Kolkata     IKOL
Delhi       IDEL
...
New York    UNYK
Washington  UWDC

因此,当用户注册到 Trichy 作为地区时,他将生成

user_id   : 1
user_code : ITRY000001

来自同一城市的第二个用户

user_id   : 2
user_code : ITRY000002

另一个来自纽约

user_id   : 3
user_code : UNYK000001

user_code 在地区上是唯一的。 [id 1 和 3 的用户不相同]

至此,我获取了用户所选地区的最大值

SELECT RIGHT(MAX(user_code),6) FROM `users` WHERE user_code LIKE 'ITRY%';

然后将其递增 1,然后将其添加回去并附加 district_code。

INSERT INTO `microreg`.`users` (`user_id`, `user_code`) VALUES (NULL, 'ITRY000003');

当一次只有一个用户更新时,此方法非常有效。但是当多个用户同时开始注册时,这开始产生问题。 由于设置了唯一性,因此生成了两个具有相同 user_code 的用户并产生了开销。

之前,对于另一个应用程序,我为每个代码创建了唯一的表(如此处的地区)并将用户添加到该表,然后追加回原始表(如此处的用户)。 在那种情况下,我只有 4 种类型的代码(比如这里的地区)。但是对于这个应用程序,我有大约 20K 个地区。我对此一无所知。 (有关信息,我将 PHP 和 mysqli 用于此应用程序)谢谢。

最佳答案

使用带有城镇前缀的 uniqid() 怎么样?像这样:

 $user_code = uniqid('UNYK', true); // with more entropy that is

请注意,这不是 100% 独特的并且在某种程度上是可预测的(我猜不是出于“正常”目的)。

或者(根据您的评论),您可以设置一个包含三列的新表(例如 towntoid 或其他)

Town        town_code  current_max
----------|-----------|-----------
Trichy      ITRY        10
Coimbatore  ICBE        124
Kolkata     IKOL        213
Delhi       IDEL        0
...
New York    UNYK        21

如果有新用户注册,从那里获取 current_max 并将其递增 1。这些表可以通过 JOIN 连接(在 town_code 上)。

关于php - 基于地区的唯一代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33383456/

相关文章:

php - 选择表中的最后一条记录

mysql - 方法无法使用 Rails ActiveRecord + Raw SQL 返回 Average

php - CakePHP 与内部连接

PHP邮件程序多个地址

mysql 在大表上使用不正确的索引

php - 取消设置 mysql 表上数组中的特定值

php - 使用 div 中的文本填充 Flot 图表

php - 使用 PHP 和 HTML 将文本字段插入数据库

php - MySQLI_ASSOC 转 JS 数组

php - Symfony2 : Form Validation with Collection