在导入Excel表时,怎样去检查Mysql数据库里是否已经存在了呢?
只有一个字段“Code”,之前写过一次代码,是每导一条记录就查询一次Mysql,如果有几千条就得查询几千次mysql。
就想能不能将要查询的字段,提前将查询结果生成集再去判断,结果弄了老半天都没结果(新手上路)。
请大神们指点,下面是主要的代码。$datetime=date("Y-m-d H:i:s");
$ipmnuml=0; //重复记录数
$ipmdenuml=0;  //插入记录数$sql=mysql_query("select Code from test  ",$conn);
$sqlvalue = mysql_fetch_array($sql);for ($i=2; $i<=$xls->sheets[0]['numRows']; $i++) {
  //循环Excel表中的内容
  $name = $xls->sheets[0]['cells'][$i][1];  $name = strtoupper(trim($name)); //要插入的内容foreach( $sqlvalue as $value){
  if(in_array($value,$name)){
      $ipmdenuml++;
  }else{
    $ipmnuml++;
    $data_values .= "('$name','$datetime'),"; 
  }
}
ob_flush();
flush(); 
}$data_values = substr($data_values,0,-1); //去掉最后一个逗号
$query = mysql_query("insert into test (Code,Datetime) values $data_values");//批量插入数据表中
$insert_num=mysql_affected_rows();

解决方案 »

  1.   

    $data_values .= "('$name','$datetime'),"; 
      

  2.   

    思路是对的阿,在code上建立索引,取出code字段结果集对数据库来说压力不大,一次性插入几千条也没问题。
    不过看代码就很奇怪了,in_array($value,$name)是什么意思?
    循环excel的数据,判断是否在数据库的结果集就好了。in_array($name,$sqlvalue)不就完事了吗
      

  3.   


    试过用in_array($value,$name),但是还是判断不出来,感觉像是没有拿到结果集。
      

  4.   

    $datetime=date("Y-m-d H:i:s");
    $sql=mysql_query("select Code from test  ",$conn);
    while($row = mysql_fetch_array($sql)){
    $hash[$row['Code']]=1;
    }
    for ($i=2; $i<=$xls->sheets[0]['numRows']; $i++) {
      //循环Excel表中的内容
      $name = $xls->sheets[0]['cells'][$i][1];
      $name = strtoupper(trim($name)); //要插入的内容
      $hash[$name]+=1;
      if($hash[$name]==1){
      $data_values .= "('$name','$datetime'),"; 
      }
    }
    $data_values = substr($data_values,0,-1); //去掉最后一个逗号
    $query = mysql_query("insert into test (Code,Datetime) values $data_values");//批量插入数据表中
    $insert_num=mysql_affected_rows();