2017-05-26 4 views
0

J'utilise cette requête SQL pour créer un nouvel ID unique à une colonne. Je pense que j'ai eu l'idée d'un autre post de StackOverlow il y a longtemps. Mais ça ne marche pas, et je ne sais pas pourquoi. Je vais générer 100 à 100 IDs (en ajoutant chacun à la base de données au fur et à mesure) et je finirai parfois avec des doublons.Générer des ID uniques à la volée

Y at-il quelque chose d'évident qui pourrait être hors de cette requête?

SELECT FLOOR(RAND() * 99999) AS random_num 
FROM listings 
WHERE 'random_num' NOT IN (SELECT identifier FROM listings) 
LIMIT 1 
+0

pourquoi pas vous suffit d'utiliser un champ incrémentation automatique? – maSTAShuFu

+0

C'est une situation où je ne veux pas que la rangée suivante soit facilement devinable –

Répondre

0

Je pense que vous avez l'intention:

SELECT l.* 
FROM (SELECT FLOOR(RAND() * 99999) AS random_num 
     FROM listings l 
    ) l 
WHERE random_num NOT IN (SELECT identifier FROM listings) 
LIMIT 1 

Votre code a 'random_num' qui est une chaîne et peu susceptible de correspondre à un identifiant numérique.

Je pense que vous devriez simplement utiliser auto_increment.

+0

oui, c'est le ticket. Erreur simple, mais je ne pouvais pas le voir –