2009-12-07 5 views
0

Je cette sqlobtenir le code aléatoire existe pas mysql

select concat(char(FLOOR(97+ RAND()*26)) 
        , char(FLOOR(97+ RAND()*26)) 
        , FLOOR(100+ RAND()*999) 
        , char(FLOOR(97+ RAND()*26))) AS randomcode 
WHERE NOT EXISTS (
     SELECT * 
     FROM table 
     WHERE code_felt = randomcode); 

Mais je ne peux pas le faire fonctionner. Est-ce que quelqu'un sait ce que je fais mal ici?

J'ai besoin de faire un code de 6 cartes au hasard et il n'existe pas dans mon code. J'espère que je peux être aidé.

Répondre

1

Vous devez sélectionner quelque part. Votre SELECT n'a pas de nom de table. Puisque vous ne sélectionnez pas réellement des valeurs aléatoires à partir d'une table, vous devez utiliser DUAL (ce qui est une table « faux »):

select concat(
    char(97+ RAND()*26), 
    char(97+ RAND()*26), 
    floor(100+rand()*900), 
    char(97+ RAND()*26)) 
as randomcode from dual 
    WHERE NOT EXISTS (SELECT * FROM table WHERE code_felt = randomcode); 

Cela parfois sélectionner un enregistrement, parfois aucun enregistrement. Si elle ne sélectionne aucun enregistrement, vous devez répéter la requête, je ne peux pas penser à un moyen de le faire toujours sélectionner un enregistrement.

+0

perfeket, et les chars je ne sais pas que je peux utiliser double table (faux) relly agréable et les réservoirs beaucoup :) – ParisNakitaKejser

+0

si je seulement ce que az dans carh aléatoire pouvez-vous m'aider à ce que cela? :) – ParisNakitaKejser

+0

(97+ RAND() * 26) - c'est a-z, tu as raison. –

-1

Essayez ceci:

select CONCAT(char(rand()*26+65),char(rand()*26+65)); 
+0

oui? maintenant j'ai seulement besoin de chercher un code quand il n'est pas utilisé dans ma table de code. :) – ParisNakitaKejser

+1

@NeoNmaN: Je doute qu'il est possible d'accomplir est SQL simple - vous aurez probablement besoin d'une procédure stockée qui va générer ces ID dans une boucle, jusqu'à ce qu'il trouve un unique – catwalk