2016-03-27 24 views
0

我已经使用了它,但是我刚刚找到了类似的答案。
我不是后端开发人员,所以我不知道很多SQL。我需要生成并插入一个6位数的随机值,它涉及不存在于同一列中的数字和字符(varchar,我认为)。生成一个不存在于同一列中的随机值

我试过这个FLOOR(RAND() * 401) + 100,我发现了某个地方,但它只是生成数字......没什么。

我迷路了。

请掌握数据库,用你的随机数字照亮我的方式;

+0

你打算用范围[100-500]中的数字很快打出所谓的生日悖论。 –

回答

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

这将创建一个6个字符的“随机”字母数字值。

但是:

  • 您需要检查值在你的表已经存在。
  • 分布不相等,因为rand()会回传一个只有23位精度的FLOAT,而POW(36,6)需要类似32位的东西。

更新:

但是 - 因为你需要检查,如果该值已经存在,你最好在PHP中创建的数量。

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

您需要调整代码以适应MySQL通信的任何需求。

+0

它的工作,但我真的不知道如何检查值是否存在:( – Igor

+0

在应用程序的网站上做它。你使用什么语言?你将需要某种循环 –

+0

我使用PHP和MySQL。 – Igor