1

我有一个数据库,其中包含带有"id"整数自动增量列的消息。古典。但我想根据这个整数 id 创建一个“视觉”id。这就是我要的 :

A0001
A0002
[...]
A9999
B0001
B0002
[etc]

理想的情况是根据整数 id 自动(在 MYSQL 中)生成这个 messageId。我也可以在 PHP 中生成这个 id。但是如何?困难在于我们必须检查数据库中的最后一个 id 来计算视觉 id 的前缀是什么字母。

你能帮我生成这个吗?如果可以直接在 MYSQL 中还是在 PHP 中?

4

4 回答 4

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)
于 2013-07-16T11:13:41.357 回答
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>";

}
}
于 2014-09-29T11:57:58.543 回答
0

You can create such ids using a before insert trigger to create the new value.

Basically you would look up the maximum value and then increment it, by doing something like:

(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);

However, I would discourage you from doing this and just set up a regular auto-increment column.

于 2013-07-16T11:08:25.693 回答
0

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

但是如果你真的想在 mysql 中做到这一点,唯一的方法就是使用TRIGGERS。

您有 2 个选项可以在插入语句之后之前创建插入语句,并且在此触发器中,您应该根据前一行将 ID 的值更新为您的值。但我真的推荐使用hex

您可以在此处阅读有关触发器的更多信息

于 2013-07-16T11:05:26.757 回答