Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于带字母的整数创建ID_Php_Mysql_Identifier - Fatal编程技术网

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中实现它,唯一的方法就是使用触发器。

您有两个选项可以创建insertAFTERBEFOREinsert语句,在此触发器中,您应该根据上一行将ID的值更新为您的值。但我真的建议使用十六进制


您可以阅读更多关于触发器的信息

您考虑过使用十六进制吗?为什么不写
OxA001
它仍然是整数如果你写
A001
那么它是字符串,不可能自动递增

但是如果你真的想在mysql中实现它,唯一的方法就是使用触发器。

您有两个选项可以创建insertAFTERBEFOREinsert语句,在此触发器中,您应该根据上一行将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)