php 如何在导入Excel数据时检查Mysql数据库内容是否存在,避免重复录入? 30
在导入Excel表时,怎样去检查Mysql数据库里是否已经存在了呢?只有一个字段“Code”,之前写过一次代码,是每导一条记录就查询一次Mysql,如果有几千条就得查询几...
在导入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(); 展开
只有一个字段“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个回答
展开全部
如果不想每条查询一次,可以提前做一个统一查询
$sql=mysql_query("select distinct Code from test ",$conn);
$sqlvalue=[];
while($row=mysql_fetch_array($sql)){
$sqlvalue[]=$row['Code'];
}
另外 ,可以在建表的时候设置unique index,来彻底避免插入重复记录,如果没过滤好插入重复记录的时候,系统会直接报错
$sql=mysql_query("select distinct Code from test ",$conn);
$sqlvalue=[];
while($row=mysql_fetch_array($sql)){
$sqlvalue[]=$row['Code'];
}
另外 ,可以在建表的时候设置unique index,来彻底避免插入重复记录,如果没过滤好插入重复记录的时候,系统会直接报错
追问
就是要去每个记录都检查一下是否存在,如果存在就不写入数据库。
另外你说的用unique index,可以避免重复记录?具体怎么操作?
我想做的目的,是在导入时可以直接去掉重复的。但是反复去查询又耗时耗服务器。
追答
你的查询已存在记录的方法不对,只能获取一条记录,判断也对应不上
按我的代码,修改到获取已存在记录的部分再测试
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询