2012-03-26 8 views
3

すでに一部のレコードを含むテーブルにフィールド名「unique_no」があります。 フィールド 'unique_no'にレコードを選択します。このフィールドは、
- 10000 - 99999と
の間にある - unique_noフィールドレコードには存在しません。レコードを10000〜99999の間に挿入して、unique_noフィールドレコードに存在しないフィールドに挿入します。

ですので、これを行う方法を教えてください。 ありがとうございます。

+0

あなたはどの部分で問題がありますか? – RedFilter

+0

そのフィールドのUNIQUEインデックスが 'INSERT IGNORE INTO ...'を使うことができれば、一意の行は挿入されません。 – piotrekkr

+0

チェック制約がこれでうまくいくでしょう。 –

答えて

1
    を評価します
  1. フィールドunique_noをAUTO_INCREMENTにします。
  2. テーブルオプションを設定するAUTO_INCREMENT = 10000;
  3. 新しいレコードを挿入するには、unique_noフィールドにNULLを指定します。
0

それが最適化される必要がありますが、基本的には(擬似コード)のようなコードが必要になります。

// lock table to prevent duplicates 
mysql_lock_table('table'); 
do { 
    $random = rand(10000, 99999); 
} while (mysql_count_rows("SELECT count(*) FROM table WHERE unique_no = %value", $random) > 0); 
$row['unique_no'] = $random; 
mysql_insert($row); 
// unlock table 
mysql_unlock_table('table'); 

テーブルがフィールド上キーUNIQUEを持っている場合、あなたが影響を受けた行とINSERT IGNOREを使用することができますが

// lock table to prevent duplicates 
do { 
    $random = rand(10000, 99999); 
    $row['random'] = $random; 
    $result = mysql_insert_ignore($row); 
} while (mysql_affected_rows($result) == 0); 
+0

コードが擬似コードに書き込まれています。 – Electronick

関連する問題