大数据量的csv格式,5-6万条数据
客户端 php导入mysql有什么好的解决方案?目前的思路(手机号码管理)
1:客户浏览上传
2:读取上传缓存文件 $_FILES['csvfile']['tmp_name']
3:格式处理 
4:判断是否存在手机号码
5:插入/更新数据库目前写的文件更新个2000多条执行速度就卡卡的// 批量上传商品的字段
$_LANG['upload_goods']['mobilenumber'] = '手机号码';
$_LANG['upload_goods']['name'] = '姓名';
$_LANG['upload_goods']['address'] = '属地';   // 需要转换成brand_id
$_LANG['upload_goods']['brand'] = '品牌';
$_LANG['upload_goods']['price'] = '金额';
$_LANG['upload_goods']['paytime'] = '缴费时间';$_LANG['batch_upload_ok'] = '批量上传成功';
$_LANG['goods_upload_confirm'] = '批量上传确认';$line_number = 0;
     $goods_list = array();
$field_list = array_keys($_LANG['upload_goods']); // 字段列表
$data = file($_FILES['csvfile']['tmp_name']);

foreach ($data AS $line)
     {
         // 跳过第一行
         if ($line_number == 0)
         {
             $line_number++;
             continue;
         }
$line = iconvs('gb2312', 'utf8', $line);
         // 初始化
         $arr    = array();
         $buff   = '';
         $quote  = 0;
         $len    = strlen($line);
         for ($i = 0; $i < $len; $i++)
         {
             $char = $line[$i];             if ('\\' == $char)
             {
                 $i++;
                 $char = $line[$i];                 switch ($char)
                 {
                     case '"':
                         $buff .= '"';
                         break;
                     case '\'':
                         $buff .= '\'';
                         break;
                     case ',';
                         $buff .= ',';
                         break;
                     default:
                         $buff .= '\\' . $char;
                         break;
                 }
             }
             elseif ('"' == $char)
             {
                 if (0 == $quote)
                 {
                     $quote++;
                 }
                 else
                 {
                     $quote = 0;
                 }
             }
             elseif (',' == $char)
             {
                 if (0 == $quote)
                 {
                     if (!isset($field_list[count($arr)]))
                     {
                         continue;
                     }
                     $field_name = $field_list[count($arr)];
                     $arr[$field_name] = trim($buff);
                     $buff = '';
                     $quote = 0;
                 }
                 else
                 {
                     $buff .= $char;
                 }
             }
             else
             {
                 $buff .= $char;
             }             if ($i == $len - 1)
             {
                 if (!isset($field_list[count($arr)]))
                 {
                     continue;
                 }
                 $field_name = $field_list[count($arr)];
                 $arr[$field_name] = trim($buff);
             }
         }
        $goods_list[] = $arr;
     }
if(!empty($goods_list)){
$count_insert=0;
$count_update=0;
foreach($goods_list as $val){
$sql="select mobilenumber from {$table}mobile where mobilenumber='$val[mobilenumber]'";
$num=$db->getOne($sql);
if(empty($num)){
$sql="insert into {$table}mobile (mobilenumber,name,address,brand,price,paytime) values('$val[mobilenumber]','$val[name].','$val[address]','$val[brand]','$val[price]','$val[paytime]')";
$res = $db->query($sql);
$count_insert=$count_insert+1;
}
else{
$sql="update {$table}mobile set name='$val[name]',address='$val[address]',brand='$val[brand]',price='$val[price]',paytime='$val[paytime]' where mobilenumber='$val[mobilenumber]'";
$res = $db->query($sql);
$count_update=$count_update+1;
}
$count_all=$count_insert+$count_update;
}
$msg="数据<font color=red><b>".$count_all."</b></font>条成功更新<br>新增<font color=red><b>".$count_insert."</b></font>条<br>更改<font color=red><b>".$count_update."</b></font>条";
show($msg);
}
else{
show('没有相关数据,请确认上传CSV文件内有数据');
}