检查mySQL数据库是否有重复的uid

时间:2011-01-11 07:52:57

标签: php mysql

我正在尝试在我的PHP代码中执行检查,检查数据库中是否存在重复的uid,如果是,则分配新的uid,然后再次检查,但是我无法确定逻辑,这是我到目前为止所拥有的,

function check($uid){
    $sql = mysql_query("SELECT * FROM table WHERE uid='$uid'");
    $pre = mysql_num_rows($sql);

    if($pre >= 1){
        return false;
    }else{
        return true;
    }
}

然后使用该函数我想到使用while循环继续循环直到它评估为true

$pre_check = check($uid);

while($pre_check == false){
    //having trouble figuring out what should go here
}

所以基本上,一旦我有了一个可用的uid,就把所有东西写到数据库中,否则继续生成新的并检查它们,直到它找到一个尚未使用的。

这可能很简单,但由于某种原因,我遇到了麻烦。 Thanx提前!

2 个答案:

答案 0 :(得分:2)

$uid = 100;  // pick some other value you want to start with or have stored based on the last successful insert.
while($pre_check == false){
    $pre_check = check(++$uid);
}

当然,这正是“自动递增”主键有用的。你知道mysql中的'自动递增'主键吗?

修改
根据你关于维护别人使用随机函数的代码的评论(ewwwww)...我会使用我上面建议的方法并将最后插入的id存储在某个地方,你可以再次为下一个用户读取它。这将允许您为缺少的uid“填空”。所以,例如,如果你有1个,2个,5个,9个,40个,100个...你可以从$uid = 1;开始。一旦你到达3,你的while循环将返回。现在你存储3并创建新纪录。下次,您从$uid = 3;开始,依此类推。最终你将填写所有数字。

同样重要的是要意识到您需要通过锁定WRITES的表来执行插入操作。您不希望陷入竞争状态,因为他们同时搜索可用的uid,因此两个不同的用户被赋予相同的uid。

答案 1 :(得分:1)

确实最好是使用自动增量ID,但如果你没有选择,你可以做一个这样的递归函数:

function find_uid() {
  $new_uid = rand(1000000000, 9999999999);
  $sql = mysql_query("SELECT COUNT(*) AS 'nb' WHERE uid=".$new_uid.";");
  $row = mysql_fetch_assoc();
  $pre = $row['nb'];
  return ($pre >= 1 ? find_uid() : $new_uid);
}

COUNT(*)应该更高效,因为计数是由MySQL而不是php。

顺便说一下,如果你需要一个新的uid,条件不应该是($ pre> 0)而不是($ pre> 1)?