打印

[php] 产生2000不同随机数并输入MYSQL

如题:望高手指点,感激不尽!
专业网站建设
mt_rand()函数

如果说要不重复的随机数那么次插入数据库时都要检验一下..
效率就...
No silver bullet | 初级程序员
Never give up hope
实验田: 歪藕
初学php写了一个,通过楼上才知道
mt_rand()它可以产生随机数值的平均速度比 libc 提供的 rand() 快四倍
============================================================
思路是一样的 ,用do while 弄得,生成2000个用不了多长时间10秒以里
<?php
//连接数据库略去
$i=1;
do {
       $tmprnd=mt_rand(1000, 9999);
       $sql="select count(*) as total from test where num='".$tmprnd."'";
       $result=mysql_query($sql,$conn);
       $ret=mysql_fetch_array($result);
       $count=$ret['total'];
       if($count==0){
              mysql_query("insert into test (num) values ('".$tmprnd."')",$conn);
              $i++;
       }
       }
while($i<2000)
?>
==============================================================
考虑到效率问题,可以先生成2000个不重复随机数,放到数组里,每次检测生成的在不在数组里,直到生成2000个
然后统一把2000条插入数据库。

[ 本帖最后由 EpsiLonLink 于 2008-9-2 11:35 编辑 ]

TOP

谢谢高手指点

这里果真的高手如云呀,热心肠人更多,哈哈.小弟要常来这里了.
专业网站建设

TOP

3楼这种写法会加重数据库的负担
先取出2000个不同的随机数
再插入数据库,这样开销就很大了

TOP

看LZ要什么要求了
方法1
$numbers = range(1,1000);
shuffle($numbers);
foreach ($numbers as $number) {
    echo "$number ";
}
可以取前面的2000个,他是随机的1000内数字
方法2
$array = array();
for($i=0;$i<20;$i++){
  $value = mt_rand(1,20);
  if(array_search($value,$array)===false){
    $array[] = $value;
  }else{
   $i--;
  }
}
print_r($array);

TOP

我觉得操作数组比操作数据库快

所以可以先把随机数弄成数组,再批量插入

TOP