0

mysql テーブルの列に挿入する一意のランダムな 6 桁の番号を自動的に生成するにはどうすればよいですか? ランダムに生成された数値は、列にまだ存在していてはなりません。

私はphp経由でmysqlにアクセスしています。

表の形式は次のようになり、reqnumber 列に乱数が入ります。

id,status,reqnumber
4

5 に答える 5

4
   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;
        }
于 2013-02-20T11:37:46.807 に答える
1

乱数を生成してから使用するだけstr_pad()です:

$myRandom = str_pad(rand(1,999999), 6, '0', STR_PAD_LEFT);

遭遇する問題は、これをランダムにする必要があるため、生成されるまでテーブルに存在するかどうかを知る方法がないことです。ループを作成し、DB をチェックし続ける必要があります。

于 2013-02-20T11:34:19.020 に答える
0

ランダムでもかまいませんが、6桁で100万の組み合わせしか提供されないことに注意してください。重複する主キーエラーが発生し始めるまでにどれくらいかかるかわかりません。

はるかに優れた解決策は、一意の値を使用することです。これはランダムな値とは大きく異なります。これは、一意の値が毎回異なることを保証するためです。MySqlには、これを支援するauto_incrementデータ型があります。残念ながら、6桁を使用する場合は、まだ100万エントリに制限されています。

完全にランダムで長い識別子が必要な場合は、MySqlのUUID関数を確認してください。繰り返されないことが保証されている一意の文字列を生成します。ただし、6文字よりもはるかに長いのは、それが一意性を実現するために必要な場合があるためです。

于 2013-02-20T11:37:16.760 に答える
0

テーブル構造の一部は次のとおりである必要があります。

`id` mediumint(6) AUTO_INCREMENT NOT NULL,
PRIMARY KEY (`id`)

本当に常に6桁が必要な場合:

ALTER TABLE tbl AUTO_INCREMENT = 100000;

または使用する sprintf()

于 2013-02-20T11:37:21.030 に答える
0

reqnumber フィールドに一意の制約を設定し、PHP にエラー処理コードを配置します。

于 2013-02-20T11:34:09.617 に答える