我有一个包含整数自动增量"id"
列的消息的数据库。古典。但我想基于这个整数id创建一个“视觉”id。这就是我想要的:
A0001
A0002
[...]
A9999
B0001
B0002
[etc]
理想情况是基于整数id自动生成(在MYSQL中)此messageId。我也可以在PHP中生成这个id。但是怎么样?困难在于我们必须检查数据库中的最后一个id来计算视觉ID的字母前缀。
你能帮我生成这个吗?在MYSQL中是否可以直接或在PHP中使用?
答案 0 :(得分:1)
您可以使用以下内容,但它仅适用于0到249999之间的数字(A0000 - Z9999)
select concat(char(ord('A')+round(ID / 10000)),ID % 10000) from ...
要从视觉ID转换回来,您可以使用以下内容:
select ord(VISUAL_ID)-ord('A')+mid(VISUAL_ID,2)
答案 1 :(得分:0)
OxA001
如果你A001
那么它仍然是整数,那么它是字符串并且不可能有自动增量。
但如果你真的想在mysql中做到这一点,唯一的方法是使用 TRIGGERS。
您有2个选项可以创建插入 AFTER 或 BEFORE 插入语句,在此触发器中,您应该根据前一行将ID的值更新为您的值。但我真的建议使用 hex 。
您可以阅读有关触发器here
的更多信息答案 2 :(得分:0)
您可以使用before insert
触发器创建此类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);
但是,我不鼓励你这样做,只是设置一个常规的自动增量列。
答案 3 :(得分:0)
试试这可能对你有所帮助。
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>";
}
}