gpt4 book ai didi

php - 使用 PHP 将大型 CSV 文件导入 MySQL 数据库并检查重复项

转载 作者:行者123 更新时间:2023-11-29 00:10:15 26 4
gpt4 key购买 nike

我希望你能帮助我。我搜索了很多,但不幸的是没有找到任何东西。有什么问题?我有 1 列的大 CSV 文件,其中包含电子邮件地址。单个文件大约有 50000 行。我正在创建管理面板,它允许使用 HTML 表单和 PHP 将这些文件导入服务器。通过 PHP 将 CSV 导入 MySQL 数据库很简单,但我还需要更多东西 - 检查每封电子邮件是否存在,如果存在 - 跳过它。有什么问题?表有大约 100 万条记录,检查一封电子邮件持续 +/- 3 秒。 50000 条记录乘以 3...需要最少的时间。 44小时! PHP 脚本在不到 10 分钟后停止响应......所以不可能这样做:

function doesExist($email) {
$sql = "SELECT count(*) as counter FROM mailing_subscribers WHERE subscriber_email LIKE :subscriber_email";
$sth = $this->db->prepare($sql);
$sth->execute(array(':subscriber_email' => $email));
$row = $sth->fetch();
$counter = $row->counter;
if ($counter > 0) {
return true;
} else {
return false;
}
}

function importCSV($file,$group) {

$fp = fopen($file['tmp_name'], "r");
$importsCounter = 0;

while($csv_line = fgetcsv($fp)) {
for ($i = 0, $j = count($csv_line); $i < $j; $i++) {
if (!$this->doesExist($csv_line[$i])) {
$sql = "INSERT INTO mailing_subscribers(subscriber_email,subscriber_group) VALUES('".$csv_line[$i]."','".$group."')";
$sth = $this->db->prepare($sql);
$sth->execute();
$importsCounter++;
}
}
}

$_SESSION["feedback_positive"][] = FEEDBACK_FILE_IMPORT_SUCCESSFUL . " Utworzonych wpisów: " . $importsCounter;
}

$file 是一个 $_FILE 数组。

还有其他更快的方法吗?

最佳答案

以下是我的建议:

1) 将您的 csv 文件加载到临时表中。引用http://dev.mysql.com/doc/refman/5.1/en/load-data.html

2) 它将非常快速地加载您的批量 csv 数据,可能在几秒钟内。现在使用插入查询,将数据从临时表插入主表,并检查重复值。

E.G

1) 假设您在名为“TempTable”的临时表中加载了 csv 数据

2) 假设您的主表名称是“mailing_subscribers”

3) 说你不想插入重复的记录。

您的查询将是这样的:

插入 mailing_subscribers (subscriber_email,cola,colb..) select subscriber_email,cola,colb.. from TempTable where subscriber_email not in (select subscriber_email from mailing_subscribers)

如果您遇到任何问题,请告诉我。

关于php - 使用 PHP 将大型 CSV 文件导入 MySQL 数据库并检查重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25522960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com