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