Ref00000001のようなアルファベットの値を持つオートイードを使用するテーブルを作成するにはどうすればよいですか?アルファベットの値を持つIDを自動生成するにはどうすればよいですか?
0
A
答えて
0
MySQLは、このようなIDの自動生成をサポートしていません。整数auto_increment idsのみがサポートされています。
トリガーを使用してこれを実行できますが、複数の挿入が同時に実行される場合は信頼できません。
パフォーマンス上の理由から、主キーの文字列は避けてください(特にInnoDBテーブルの場合)。
0
標準のAUTO_INCREMENTフィールドを使用してMySQLのIDの数値部分を生成し、単にPHP内の出力に "Ref"コンポーネントを追加するとよいでしょう。
ちょっとしたアドバイスとして、単一の標準関数(「makeRef」など)を作成して、このアクティビティが1つの関数でのみ実行されるようにして、将来的には簡単に修正できるようにすることができますそうする必要があります。
MySQLの場合、ZEROFILLオプションを使用して数値を一定の長さに設定することもできますが、PHPのstr_pad関数を使用して上記の "makeRef"関数内でこれを処理することは、 pad_type引き数のSTR_PAD_LEFTオプション。
1
誰かがこの種の機能を将来必要とする場合に書き込む。私はこの値を生成するためにPHPを使用しました。非常に簡単:
$q="select reference_number from accounts order by reference_number desc LIMIT 1";
$result = mysql_query($q);
$row = mysql_fetch_assoc($result);
$new_eps=explode('REF',$row['reference_number']); //get existing highest value from DB
$new_eps=$new_eps[1]+1; // increment by one
$eps_string="REF";
$length = 8 - strlen($new_eps); //I need 8 digits for my REF number
for($i=0;$i<$length; $i++){
$eps_string .='0';
}
$eps_string =$eps_string.$new_eps;
これだけです!
数字が配列から誤った順序で返された場合(例:8,7,6,5,4,400,400,3,2,1)、 "order by reference_number desc"部分を "cast by order(replace(reference) 、 'REF'、 '')unsigned)desc " –