mysql テーブルの列に挿入する一意のランダムな 6 桁の番号を自動的に生成するにはどうすればよいですか? ランダムに生成された数値は、列にまだ存在していてはなりません。
私はphp経由でmysqlにアクセスしています。
表の形式は次のようになり、reqnumber 列に乱数が入ります。
id,status,reqnumber
function gen(){
$num = rand(100000,999999);
if($num == ifnumberinyourdatabase){
gen();
}
return $num;
}
ここで再帰関数を使用することもできます。一意の番号を返さない場合は、新しい番号を生成する場合は、番号がデータベースであるかどうかを確認します
function gen(){
$num = rand(100000,999999);
$query_idgetrs = "SELECT * FROM servicetbl where reqnumber = $num";
$idgetrs = mysql_query($query_idgetrs, $dbconnection) or die(mysql_error());
$row = mysql_num_rows($idgetrs);
if($row >= 1){
gen();
}
return $num;
}
乱数を生成してから使用するだけstr_pad()
です:
$myRandom = str_pad(rand(1,999999), 6, '0', STR_PAD_LEFT);
遭遇する問題は、これをランダムにする必要があるため、生成されるまでテーブルに存在するかどうかを知る方法がないことです。ループを作成し、DB をチェックし続ける必要があります。
ランダムでもかまいませんが、6桁で100万の組み合わせしか提供されないことに注意してください。重複する主キーエラーが発生し始めるまでにどれくらいかかるかわかりません。
はるかに優れた解決策は、一意の値を使用することです。これはランダムな値とは大きく異なります。これは、一意の値が毎回異なることを保証するためです。MySqlには、これを支援するauto_incrementデータ型があります。残念ながら、6桁を使用する場合は、まだ100万エントリに制限されています。
完全にランダムで長い識別子が必要な場合は、MySqlのUUID関数を確認してください。繰り返されないことが保証されている一意の文字列を生成します。ただし、6文字よりもはるかに長いのは、それが一意性を実現するために必要な場合があるためです。
テーブル構造の一部は次のとおりである必要があります。
`id` mediumint(6) AUTO_INCREMENT NOT NULL,
PRIMARY KEY (`id`)
本当に常に6桁が必要な場合:
ALTER TABLE tbl AUTO_INCREMENT = 100000;
または使用する
sprintf()
reqnumber フィールドに一意の制約を設定し、PHP にエラー処理コードを配置します。