我正在尝试设置和应用程序以从CSV文件导入电子邮件。但是我希望在插入之前确保表中没有电子邮件。目前,该表包含800,000条记录,我使用PHP循环到
foreach ($variable as $key => $value) {
#mysql record check
}
这似乎效率低下。我考虑过使用
bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
但这需要很长时间来处理结果并使用大量系统资源。
是否有更好,更简单的方法来查找多条记录?
我想在PHP中这样做只是因为除了CSV我还想使用相同的脚本从gContacts和Hotmail导入。无论用户选择哪种方法,都要加载数组并执行插入,只是为了简单起见。
答案 0 :(得分:1)
请注意,这是对车轮的重新设计并且读取csv-> loop->插入比文件中的LOAD DATA至少慢10倍
如果您担心重复项,请使用IGNORE关键字。
LOAD DATA LOCAL INFILE 'myfile.csv'
IGNORE INTO TABLE my_table FIELDS TERMINATED BY ','
ENCLOSED BY '\"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES /* optional if you have a header */
如果您真的想在PHP中执行此操作,请创建一个执行上述
的预准备语句stmt = $dbh->prepare($q);
$stmt->execute();