有24500行数据的MySQL表,有26000字符串的数据需要插入到MySQL的文本文件,问题是这26000字符串重复MySQL表中的数据,所以我们需要比较它们,只插入新的/唯一的。
cadastreArray - array from text file
distritarray - mysql array
当我尝试做
foreach ($cadastreArray as $cadastreValue) {
$districtExist = false;
foreach ($districtArray as $districtData) {
if ($cadastreValue[0] == $districtData['1']) {
$districtExist = true;
break;
}
}
}
if(!$districtExist) { MySQL INSERT ... }
我得到执行时间错误,甚至3分钟是不够的。也许你能提供更好/更快的方法?
也许你可以将mysql字段设置为唯一的,这样当你要插入时,它将不会插入,并且会生成错误号并继续执行。所以你不需要比较。
你还可以在php。ini中增加max_execution_time另一个选项。将26k的文本文件加载到临时表中(Load DATA INFILE…
然后你可以根据一个查询执行插入,该查询获取你的临时表,并对你的完整表进行左连接,检查完整表上的字段是否为NULL。
这里有一个简单的脚本示例:-
<?php
$file = "SomeTextFile.txt";
$sql = "CREATE TEMPORARY TABLE cadastre
(
field1 INT,
field2 VARCHAR(255),
etc...
)";
if(!($db->query($sql)))
{
die($db->error());// if error, stop script
}
if(!($db->query("LOAD DATA INFILE '$file' INTO TABLE cadastre")))
{
die($db->error());// if error, stop script
}
$sql = "INSERT INTO district (field1, field2, field3, ......)
SELECT a.field1, a.field2, a.field3
FROM cadastre a
LEFT OUTER JOIN district b
ON a.field1 = b.field1
WHERE b.field1 IS NULL";
if(!($db->query($sql)))
{
die($db->error());// if error, stop script
}
?>
确保临时表和要插入的表都添加了有用的索引。