已知,
1.卡号是五位数,无规则生成的数字形式。
2.数据库已有不详数量的卡号记录。
之前的做法是,生成一个,查询一个,但是数量多的时候回出现卡顿。或者超过30秒。
解决代码
if(isset($_POST['act'])&&$_POST['act']=='adds'){
$sql="insert into tb_member(MembCode,SourceStoreId,IsCheck) values";
$num_old = (int)$_POST['num'];
if($num_old<=10){
$num_new = 15;
}
if($num_old>10){
$num_new = $num_old*1.5;
$num_new = intval($num_new);
}
for($i=0;$i
getnewmembcodenew();
}
//把获取到的卡号数组分割成为本,拼接成in查询语句,取出相同卡号的数据
$member_code_str = implode("','",$MembCodes);
$member_code_str = "'".$member_code_str."'";
$member_code_str_sql = "select MembCode from tb_member where MembCode in (".$member_code_str.")";
$getnum=$Cls->getList($member_code_str_sql);
foreach ($getnum as $k=>$v){
$member_arr []= $v['MembCode'];
}
//把重复的去掉,并且取出需要的数量
$MembCodes = array_diff($MembCodes,$member_arr);
$MembCodes=array_slice($MembCodes,0,$num_old);
//拼接插入语句
foreach ($MembCodes as $v){
$sql.="('$v',$StoreId,1),";
}
$sql=trim($sql,',');
$is_ok=$Cls->Query($sql);
}
//卡号生成部分代码
$MembCodes=array();
function getnewmembcodenew(){
global $Cls,$MembCodes;
$rmcodes=mt_rand('10000','99999');
$MembCodes[]=$rmcodes;
return $rmcodes;
}