Php 基于带字母的整数创建ID
我有一个数据库,其中包含的消息具有整数自动递增的Php 基于带字母的整数创建ID,php,mysql,identifier,Php,Mysql,Identifier,我有一个数据库,其中包含的消息具有整数自动递增的“id”列。古典的但是我想基于这个整数id创建一个“可视”id。这就是我想要的: A0001 A0002 [...] A9999 B0001 B0002 [etc] 理想的做法是基于整数id自动(在MYSQL中)生成这个messageId。我也可以在PHP中生成这个id。但是怎么做呢?困难在于我们必须检查数据库中的最后一个id,以计算视觉id的前缀字母 你能帮我生成这个吗?如果可能的话,直接在MYSQL中或在PHP中?您考虑过使用十六进制吗?为什
“id”
列。古典的但是我想基于这个整数id创建一个“可视”id。这就是我想要的:
A0001
A0002
[...]
A9999
B0001
B0002
[etc]
理想的做法是基于整数id自动(在MYSQL中)生成这个messageId。我也可以在PHP中生成这个id。但是怎么做呢?困难在于我们必须检查数据库中的最后一个id,以计算视觉id的前缀字母
你能帮我生成这个吗?如果可能的话,直接在MYSQL中或在PHP中?您考虑过使用十六进制吗?为什么不写
OxA001
它仍然是整数如果你写A001
那么它是字符串,不可能自动递增
但是如果你真的想在mysql中实现它,唯一的方法就是使用触发器。
您有两个选项可以创建insertAFTER或BEFOREinsert语句,在此触发器中,您应该根据上一行将ID的值更新为您的值。但我真的建议使用十六进制
您可以阅读更多关于触发器的信息您考虑过使用十六进制吗?为什么不写
OxA001
它仍然是整数如果你写A001
那么它是字符串,不可能自动递增
但是如果你真的想在mysql中实现它,唯一的方法就是使用触发器。
您有两个选项可以创建insertAFTER或BEFOREinsert语句,在此触发器中,您应该根据上一行将ID的值更新为您的值。但我真的建议使用十六进制
您可以阅读有关触发器的更多信息您可以在插入触发器之前使用
创建此类ID以创建新值
基本上,您将查找最大值,然后通过如下操作将其递增:
(case when maxvalue like '%9999'
then concat(char(ascii(left(maxvalue, 1) + 1)), '0000')
else concat(left(maxvalue, 1), lpad(right(maxvalue, 4) + 1), 4, '0')
end);
但是,我不鼓励您这样做,只需设置一个常规的自动增量列 您可以在插入前使用触发器创建此类ID,以创建新值
基本上,您将查找最大值,然后通过如下操作将其递增:
(case when maxvalue like '%9999'
then concat(char(ascii(left(maxvalue, 1) + 1)), '0000')
else concat(left(maxvalue, 1), lpad(right(maxvalue, 4) + 1), 4, '0')
end);
但是,我不鼓励您这样做,只需设置一个常规的自动增量列 您可以使用以下内容,但它仅适用于0到249999(A0000-Z9999)之间的数字
要从可视ID转换回,可以使用以下命令:
select ord(VISUAL_ID)-ord('A')+mid(VISUAL_ID,2)
您可以使用以下内容,但它仅适用于0到249999(A0000-Z9999)之间的数字
要从可视ID转换回,可以使用以下命令:
select ord(VISUAL_ID)-ord('A')+mid(VISUAL_ID,2)
试试这个,它可能对你有帮助
for ($i = 'A'; $i != 'AA'; $i++)
{
$prefix = $i;
$id = $prefix.sprintf("%03s",$suffix);
for ($j=1;$j<=5;$j++)
{
$res = "$id"."$j";
echo "$res"."<br>";
}
}
for($i='A';$i!='AA';$i++)
{
$prefix=$i;
$id=$prefix.sprintf(“%03s”,后缀$s);
对于($j=1;$j试试这个,它可能会对你有所帮助
for ($i = 'A'; $i != 'AA'; $i++)
{
$prefix = $i;
$id = $prefix.sprintf("%03s",$suffix);
for ($j=1;$j<=5;$j++)
{
$res = "$id"."$j";
echo "$res"."<br>";
}
}
for($i='A';$i!='AA';$i++)
{
$prefix=$i;
$id=$prefix.sprintf(“%03s”,后缀$s);
对于($j=1;$j)您应该使用PHP执行此操作,您尝试过什么吗?帮助:首先尝试确定字母(基于您尝试过的内容??是的,我尝试使用PHP。我尝试在9999之前执行循环,并检查哪个字母是适当的,但不起作用。如果整数是1,我无法添加“000”。我不知道何时继续下一个字母(9999年之后,但如何区分字母A和字母B的9999等)我完全迷路了…你应该用PHP来做这件事,你尝试过什么吗?帮助:首先尝试确定字母(根据你尝试过的内容??是的,我尝试用PHP。我尝试在9999年之前做一个循环,检查哪个字母是合适的,但不起作用。我不能添加“000”如果整数是1,我不知道什么时候开始下一个字母(9999之后,但如何区分字母A和字母B的9999等),我完全迷路了…谢谢你的帮助!所以如果我想在表中的字段中添加这个可视ID,我可以这样做:插入到消息(messageId)值(concat(char(ord('A')+round(ID/10000)),ID%10000));?是的-显然用ID号替换ID。谢谢!非常好的pist。我只是有一个问题。如果ID是1,我想用“A0001”。但是我有A1。如何添加相应的0?你可以使用lpad(round(ID/10000),4,'0')而不是round(ID/10000)谢谢你的帮助!如果我想在我的表中的一个字段上添加这个可视ID,我可以这样做:在消息中插入(messageId)值(concat(char(ord('a'))+round(ID/10000)),ID%10000));?是的-显然用ID号替换ID。谢谢!非常好的pist。我只是有个问题。我想要“A0001”如果id是1,但我有A1。如何添加相应的0?您可以使用lpad(round(id/10000),4,'0'),而不是round(id/10000)