1

"id"整数自動インクリメントの列を持つメッセージを含むデータベースがあります。クラシカル。しかし、この整数 ID に基づいて「ビジュアル」ID を作成したいと思います。これは私が欲しいものです:

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

理想は、整数 ID に基づいてこの messageId を (MYSQL で) 自動的に生成することです。この ID を PHP で生成することもできます。しかし、どのように?難しいのは、データベースの最後の 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

hexの使用を検討しましたか?OxA001もしそうなら、それはまだ整数であると書いてはいけませんA001。それは文字列であり、AUTO INCREMENT は不可能です。

しかし、本当に mysql で実行したい場合は、唯一の方法はTRIGGERS を使用することです。

insert AFTERまたはBEFORE Insert ステートメントを作成できる 2 つのオプションがあり、このトリガーでは、前の行に基づいて ID の値を自分の値に更新する必要があります。しかし、私はhexを使用することを本当にお勧めします。

トリガーの詳細については、こちらをご覧ください

于 2013-07-16T11:05:26.757 に答える
0

このような ID は、before insertトリガーを使用して新しい値を作成することで作成できます。

基本的に、最大値を調べてから、次のようにして増分します。

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

ただし、これを行うのはやめて、通常の自動インクリメント列を設定することをお勧めします.

于 2013-07-16T11:08:25.693 に答える