Hướng dẫn mysql random unique number

Possible Duplicate:
Algorithm for generating a random number

Hi i need to assign a randomly generated number to some entries into the database and it must be unique. I use:

$random_number = mt_rand();
mysqli_query($db_connection, "INSERT INTO my_table (rand_num, blabla) VALUES ('$random_number', '$blabla')");

But ofc there could always be a slightly low chance that 2 random numbers will be the same. Then i could do something like:

function random_check($random_number) {
    require_once('db_access.php');
    $random_check = mysqli_query($db_connection, "SELECT rand_num FROM my_table");
    mysqli_close($db_connection);
    $result = 1;
    while($row = mysqli_fetch_array($random_check)){
            if ($row['rand_num'] == $random_number) {
             $result=0
           }
    }
        return $result;
};

$random_number = mt_rand();
$random_check = random_check($random_number);
if ($random_check == 0) {
      $random_number = mt_rand();
}

But this would only check the number once and there will still be a chance that the new generated number already exists into the db.

Any suggestions? Thanks

asked Jan 12, 2012 at 11:41

3

Here is a method which you can use:

?>

muya.dev

9061 gold badge13 silver badges33 bronze badges

answered Jan 12, 2012 at 12:52

Vijeenrosh P.WVijeenrosh P.W

3591 gold badge3 silver badges7 bronze badges

Doing a SELECT rand_num FROM my_table and checking the resulting values is very, very inefficient. Use a WHERE clause:

do {
    $random_number = mt_rand();
    $query_object = mysqli_query($db_connection, "SELECT 1 FROM my_table WHERE rand_num = $random_number");
    $query_record = mysqli_fetch_array($query_object);
    if(! $query_record) {
        break;
    }
} while(1);

It is possible to write this code in lesser lines.

answered Jan 12, 2012 at 12:12

Hướng dẫn mysql random unique number

Salman ASalman A

252k80 gold badges423 silver badges513 bronze badges

function random_check($random_number) {
    require_once('db_access.php');
    $random_check = mysqli_query($db_connection, "SELECT rand_num FROM my_table");
    mysqli_close($db_connection);
    while($row = mysqli_fetch_array($random_check)){
            if ($row['rand_num'] == $random_number) {
             return false;
           }
    }
    return true;
};

while(!random_check(mt_rand()){
    $myNumbber = random_check(mt_rand();
}

--> Now u got unique number in "myNumber"

answered Jan 12, 2012 at 11:45

2

md5( strtotime("now").$_SERVER['REMOTE_ADDR'] );

strtotime("now") would give you a unique number, but ifyou are using this script to process forms/uploads etc from multiple users, the ip address will just make certain of that (on the off chance that at the exact same second two entries are made... can that even happen?? hmm...)

md5() cos i felt like it :D

answered Jan 12, 2012 at 11:50

UmutUmut

666 bronze badges

4