2016-03-27 13 views
0

Ich googelte es bereits, aber ich fand nur ähnliche Antworten.
Ich bin kein Backend-Entwickler, daher kenne ich nicht viel SQL. Ich muss einen 6-stelligen Zufallswert generieren und einfügen, der Zahlen und Zeichen enthält (varchar, glaube ich), der nicht in derselben Spalte existiert.Generieren Sie einen zufälligen Wert, der nicht in der gleichen Spalte existiert

Ich habe versucht, diese FLOOR(RAND() * 401) + 100, die ich irgendwo gefunden, aber es nur Zahlen generieren und ... nichts mehr.

Ich bin verloren.

Bitte, Master von Datenbanken, beleuchten meinen Weg mit Ihren Zufallszahlen; -;

+0

Sie werden das sogenannte Geburtstagsparadox ziemlich schnell mit Zahlen im Bereich [100-500] treffen. –

Antwort

1
SELECT LPAD(CONV(RAND() * POW(36, 6), 10, 36), 6, 0) 

Dadurch wird ein "zufälliger" alphanumerischer Wert mit 6 Zeichen erstellt.

Aber:

  • Sie müssen prüfen, ob der Wert bereits in der Tabelle vorhanden ist.
  • Die Verteilung ist nicht gleich, weil rand() einen FLOAT zurücksendet, der nur eine Genauigkeit von 23 Bit hat, während POW (36, 6) etwa 32 Bit benötigt.

Update:

jedoch - weil Sie überprüfen müssen, wenn der Wert bereits vorhanden ist, sollten Sie besser die Zahl in PHP erstellen.

$success = false; 
while (!$success) { 
    $rndInt = rand(0, pow(36, 6) - 1); 
    $rndStr = base_convert ($rndInt, 10, 36); 
    $rndStr = str_pad($rndStr , 6, "0", STR_PAD_LEFT); 

    $query = "SELECT 1 FROM your_table WHERE your_column = {$rndStr} LIMIT 1"; 
    $db->query($query); 
    if (!$db->fetchColumn()) { // value does not exist yet 
     // insert new random value 
     $query = "INSERT INTO your_table (your_column) VALUES ({$rndStr})"; 
     $db->query($query); 
     $success = true; // will terminate the loop 
    } else { // value already exists 
     // do nothing - try again in the next loop 
    } 
} 

Sie müssen den Code ajust was auch immer verwenden Sie für MySQL-Kommunikation.

+0

Es hat funktioniert, aber ich weiß wirklich nicht, wie man überprüft, ob der Wert existiert :( – Igor

+0

Tun Sie es auf der Anwendungsseite. Welche Sprache verwenden Sie? Sie benötigen eine Art von Schleife –

+0

Ich benutze PHP und MySQL. – Igor