既然是 数据库中已有记录用到的数字新的记录就不能有了
那么查询就是必须要有的了,不然就不知道数据库中已经有了哪些
$rs = mysql_query('select group_concat(`分配号`) from 表');
list($code) = mysql_fetch_row($rs);
$code = array_diff(range(1, 200), explode(',', $code));
shuffle($code);$code[0] 就是当前应插入的 分配号

解决方案 »

  1.   

    查询到如果有了以后怎么继续运行下去啊,不能BREAK,得再循环一下,再出个随机数,然后再查询数据库,直到库里确实不重复了,才能插入,那这样效率不是太低了么?
      

  2.   

    单独建一个number表,只有一个id字段主键,提前写好200行数据
    每次插入数据时,生成一个1~200的随机数rand,然后从number表取出小于等于rand的一个最大的数并删除
      

  3.   

    先用一个数组保存1-200所有的数字,然后在循环里面随机取数组中的一个成员,插入数据库,之后把这个数组成员unset了
    接着再依次循环以上动作,直接全部插入完毕。
      

  4.   


    如果数据只有200条,1楼的是最好的了。
    如果数据比较大,不建议每次搜寻记录表中已使用的分配码,应该起一个分配码表,记录1-N的分配码,每次使用完,更新状态为已使用。下次只在未使用的分配码中获取。但这样,如果记录被删除了,那么对应的分配码的状态也应更新为未使用。1楼的思路是,先读取表中已有的分配码,然后用1-200的数组与已有的分配码做diff操作,得出未使用的分配码,然后用shuffle随机选一个使用。