Question

J'ai une table que j'ai ajouté une colonne appelée phone - la table dispose également d'un ensemble identifiant comme une clé primaire de auto_increments. Comment puis-je insérer une valeur aléatoire dans la colonne de téléphone, qui ne sera pas dupliqués. L'instruction UPDATE suivante a fait insérer des valeurs aléatoires, mais pas toutes uniques. En outre, je ne suis pas vendu, je jetai le champ phone correctement non plus, mais se heurtaient à des problèmes en essayant de le définir comme un int (11) w / la commande ALTER TABLE (principalement, il a couru correctement, mais lors de l'ajout d'une ligne avec une nouveau numéro de téléphone, la valeur insérée a été traduit en un nombre différent).

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

Tableau de spécification

+------------+--------------+------+-----+---------+----------------+
| 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    |                |
+------------+--------------+------+-----+---------+----------------+
Était-ce utile?

La solution

Essayer cette

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

Autres conseils

-- 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('123abcABC-_$@' , 1+ FLOOR(RAND()*LENGTH('123abcABC-_$@'))     ,1) SEPARATOR '')
  FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) AS dummy_tbl
);

J'attaquer en générant une table (temporaire) contenant les numéros dans la gamme dont vous avez besoin, en boucle puis dans chaque enregistrement de la table que vous souhaitez fournir des nombres aléatoires. Choisir un élément aléatoire à partir de la table temporaire, mettre à jour la table à cela, et le retirer de la table temporaire. Pas beau, ni rapide .. mais facile à développer et facile à tester.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top