k t*_*e z 12 php mysql algorithm
下面的函数吐出一个随机ID.我正在使用它来提供识别记录的确认别名.但是,我必须检查碰撞(但不太可能),因为我们只使用五位数长度.使用下面列出的允许字符,它可以达到大约3300万个组合.最终我们将获得500万左右的记录,因此碰撞成为一个问题.
检查欺骗别名效率低,资源量大.搜索500万条记录很多.特别是当该搜索由不同用户同时进行时.
有没有办法'自动增加'此功能允许的组合?意思是我只需搜索最后一条记录的别名并转到下一个组合?
我意识到代码与下面的函数有很大的不同.我也意识到mysql具有数字ID的自动增量功能,但该项目需要一个五位数的别名,允许的字符为"23456789ABCDEFGHJKLMNPQRSTUVWXYZ".我的双手就是这个问题的关键.
public function random_id_gen($length)
{
$characters = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
$max = strlen($characters) - 1;
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= $characters[mt_rand(0, $max)];
}
return $string;
}
Run Code Online (Sandbox Code Playgroud)
为什么不在别名列上创建唯一索引?
CREATE UNIQUE INDEX uniq_alias ON MyTable(alias);
Run Code Online (Sandbox Code Playgroud)
此时您可以尝试插入/更新,如果它返回错误,请生成一个新别名,然后重试.
| 归档时间: |
|
| 查看次数: |
1727 次 |
| 最近记录: |