2016-03-27 21 views
0

Zaten onu hazırladım, ancak benzer yanıtlar buldum.
Arka plan geliştiricisi değilim, bu yüzden çok fazla SQL bilmiyorum. Aynı sütunda bulunmayan sayıları ve karakterleri (varchar, sanırım) içeren 6 basamaklı bir rasgele değer üretmem ve eklemem gerekiyor.Aynı sütunda bulunmayan rastgele bir değer üret

Bir yerde bulduğum bu FLOOR(RAND() * 401) + 100'u denedim, ancak yalnızca sayı üretiyor ve ... başka bir şey değil.

Kayboldum.

Lütfen, veritabanlarının ustaları, rasgele sayılarla yolumu aydınlatın;

+0

[100-500] aralığındaki sayılarla oldukça hızlı bir şekilde adlandırılan doğum günü paradoksuna vuracaksınız. –

cevap

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

Bu, 6 karakterli "rasgele" alfasayısal bir değer yaratacaktır.

Ama:

  • Sen değeri zaten tabloda varlığının kontrol edilmesi gerekir.
  • Dağıtım eşit değil, çünkü rand() yalnızca 23 bit hassasiyete sahip bir FLOAT'ı geri döndürürken, POW (36, 6) 32 bit gibi bir şeye ihtiyaç duyar.

Güncelleme:

Ancak - Kontrol etmek gerekir, çünkü değer zaten varsa, daha iyi PHP numarayı oluşturun.

$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 
    } 
} 

Sen MySQL iletişimi için kullanmak her ne kadar kodu ajust gerekecektir.

+0

Çalıştı, ama gerçekten değerin olup olmadığını nasıl kontrol edeceğimi bilmiyorum :( – Igor

+0

Uygulamada ne yaparsın? Hangi dili kullanırsın? –

+0

Döngü türüne ihtiyacım var PHP ve MySQL kullanıyorum – Igor

İlgili konular