我有一个基本的MySQL数据库,其中每一行都被分配了一个唯一的递增ID号,但是我也希望每行都有一个唯一的6个字符的字母数字ID,它也是递增的。示例:
Row 1: ID = 1, Name = AAAAAA
Row 2: ID = 2, Name = AAAAAB
Row 3: ID = 3, Name = AAAAAC数据库是通过PHP添加到的,所以这可以通过PHP和纯SQL来完成。
到目前为止,我一直在尝试构建一个可以将数字ID转换为AlphaNumeric ID的PHP函数,但没有成功。
有人有什么建议吗?谢谢。
发布于 2010-10-31 02:52:48
这样的代码应该可以工作并生成唯一的ID(只生成字母):
function alphaID($n)
{
for($r = ""; $n >= 0; $n = intval($n / 26) - 1)
$r = chr($n%26 + 0x41) . $r;
return str_pad($r, 6, 'A', STR_PAD_LEFT);
}
echo alphaID(0); // returns "AAAAAA"
echo alphaID(1); // returns "AAAAAB"
...
echo alphaID(8652); // returns "AAALTU"发布于 2010-10-31 03:09:40
数字id是唯一的。我不会在表中存储字母数字值(这违反了DB规范化的一些规则),而且数字id和字母数字id实际上是同一个值,没有意义重复存储值!如果可能(应该是这样),只使用数值进行查询(我假设它是您的主键)。
我会使用PHP函数将numeric转换为字母数字(比如Tatu Ulmanen发布的),并在您有理由显示字母数字时在页面中调用它。在MSSQL中,如果您不想依赖PHP,则可以编写一个UDF,以便在需要时显示该值。虽然我从来没有真正接触过myssql的存储函数等,所以我不确定是否可以用它来做这些事情。
您还可以使用PHP的base_convert()函数
base_convert(35, 10, 36); //= convert '35' from base '10' to base '36' and you would get 'Z'发布于 2011-10-03 15:16:04
一种简单的方法是最好以基数32或十六进制格式表示数字...一个简单而快速的解决方法。
https://stackoverflow.com/questions/4060149
复制相似问题