2011-01-11 9 views
4

私はphoneと呼ばれる列を追加したテーブルを持っています - テーブルはまた、auto_incrementsが主キーとして設定されています。どのように私は電話の列にランダムな値を挿入することができます、それは重複しません。次のUPDATE文はランダム値を挿入しましたが、それらのすべてが一意ではありません。また、私はphoneフィールドを正しくキャストしても販売されていませんが、ALTER TABLEコマンドでint(11)として設定しようとすると問題に遭遇しました(主に正しく実行されましたが、新しい電話番号、挿入された値は別の番号に変換されました)。MySQLの変更テーブル、一意のランダム値を持つ列を追加

 
UPDATE Ballot SET phone = FLOOR(50000000 * RAND()) + 1; 

表の仕様の

 
+------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| phone  | varchar(11) | NO |  | NULL |    | 
| age  | tinyint(3) | NO |  | NULL |    | 
| test  | tinyint(4) | NO |  | 0  |    | 
| note  | varchar(100) | YES |  | NULL |    | 
+------------+--------------+------+-----+---------+----------------+ 
+0

マインドあなたがこれを行う必要があるだろう、なぜ私が頼めば? –

+0

もちろん、私は、ポストカード登録プロセスから投票コードを介して登録プロセスに変換されている既存のテーブルに取り組んでいます。これにより、有権者は自動音声サービスを通じて自分自身を検証することができます。このサービスでは、電話番号ごとに1回のアンケートのみを記入することができます。 – Schoffelman

+0

私はそれを考えています - 電話のフィールドは、それがユニークで、既存の10桁の電話番号でない限り、ランダムである必要はありません。何かのように UPDATE Ballot SET phone = id; はうまくいくはずです。 – Schoffelman

答えて

2

この

UPDATE Ballot SET phone = FLOOR(50000000 * RAND()) * id; 
+0

それでも、保証された一意性のための彼の要求を満たしません... 60(乱数)* 1(id)== 30(ランダムと同じ)* 2(id)。 – kander

+2

次にfixnumber * idを追加してください。すなわち、893433 * id – shankhan

+0

フィールドに記入するためにこれと似たようなことをしましたが、それが最高の解決策であるかどうかはわかりません。 – Schoffelman

0

を試してみてください、あなたはその値が列になっていない場合は、その後のチェック、電話を作成、試したことがありますか?

+0

理想的には、これを解決する必要があります。更新を行い、その後にチェックを入れると、ループすることになります。これは計算コストがかかります。 (私のソリューションはループではなく、少なくとも高価なものです...) – kander

0

私は必要な範囲の数値を含む(一時的な)テーブルを生成し、乱数を供給したいテーブルの各レコードをループすることでこれに取り組んでいます。テンポラリテーブルからランダムな要素を選び、テーブルを更新してテンポラリテーブルから削除します。美しくないし、高速でもありませんが、開発が容易で、テストが簡単です。

5
-- tbl_name: Table 
-- column_name: Column 
-- chars_str: String containing acceptable characters 
-- n: Length of the random string 
-- dummy_tbl: Not a parameter, leave as is! 
UPDATE tbl_name SET column_name = (
    SELECT GROUP_CONCAT(SUBSTRING(chars_str , 1+ FLOOR(RAND()*LENGTH(chars_str)) ,1) SEPARATOR '') 
    FROM (SELECT 1 /* UNION SELECT 2 ... UNION SELECT n */) AS dummy_tbl 
); 

-- Example 
UPDATE tickets SET code = (
    SELECT GROUP_CONCAT(SUBSTRING('[email protected]' , 1+ FLOOR(RAND()*LENGTH('[email protected]'))  ,1) SEPARATOR '') 
    FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) AS dummy_tbl 
); 

Random string in MySQL

+0

パーフェクトソリューション:) – kovpack

関連する問題