すでに一部のレコードを含むテーブルにフィールド名「unique_no」があります。 フィールド 'unique_no'にレコードを選択します。このフィールドは、
- 10000 - 99999と
の間にある - unique_noフィールドレコードには存在しません。レコードを10000〜99999の間に挿入して、unique_noフィールドレコードに存在しないフィールドに挿入します。
ですので、これを行う方法を教えてください。 ありがとうございます。
すでに一部のレコードを含むテーブルにフィールド名「unique_no」があります。 フィールド 'unique_no'にレコードを選択します。このフィールドは、
- 10000 - 99999と
の間にある - unique_noフィールドレコードには存在しません。レコードを10000〜99999の間に挿入して、unique_noフィールドレコードに存在しないフィールドに挿入します。
ですので、これを行う方法を教えてください。 ありがとうございます。
unique_no
をAUTO_INCREMENTにします。unique_no
フィールドにNULLを指定します。それが最適化される必要がありますが、基本的には(擬似コード)のようなコードが必要になります。
// 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);
コードが擬似コードに書き込まれています。 – Electronick
あなたはどの部分で問題がありますか? – RedFilter
そのフィールドのUNIQUEインデックスが 'INSERT IGNORE INTO ...'を使うことができれば、一意の行は挿入されません。 – piotrekkr
チェック制約がこれでうまくいくでしょう。 –