PHP 不要从 for 循环中在数据库中插入重复项
PHP do no insert duplicates in database from for loop
我查看了一些类似的问题,但找不到解决方案。所以我从 excel table 导入数据。数据包含公司名称、公司唯一编号、城市和地址。
我需要的是检查数据库中是否存在唯一编号,如果存在 - 跳过,如果不存在 - 创建记录。下面是我的代码,它循环遍历行:
for ($i = $data_start_row; $i < $sheetCount + 1; $i++) {
$externalsales->eik = $spreadSheetAry[$i][$client_eik];
if ($externalsales->getSocieteByBulstat() > 0) {
continue;
} else {
$importfromexcel->nom = $spreadSheetAry[$i][$client_name];
$importfromexcel->address = $spreadSheetAry[$i][$client_address];
$importfromexcel->town = $spreadSheetAry[$i][$client_city];
$importfromexcel->tva_intra = $spreadSheetAry[$i][$client_eik];
$importfromexcel->userId = $user->id;
$importfromexcel->insertSocieteRecord();
}
}
问题是,有时文件中有不止一行,缺少记录的数据相同,因此在数据库中创建了重复项。我怎样才能避免这种情况?
尝试使用 goto start;
,其中 start:
在 for 循环之前,但这不起作用(第一个丢失记录的记录束像 +500 个重复一样插入)。
将其中一列设置为唯一是我最后的选择,但我更喜欢在脚本中进行。
因此,对于偶然发现这里的任何人,我的最终解决方案如下:
由于数据库的某些限制,我无法为目标 table societe
中的字段 tva_intra
设置唯一索引,所以我切换到 2 步处理
第一步: 我创建了自定义 table societe_temp
,具有与问题中描述的相同字段,为此 table我能够为字段 tva_intra
:
设置唯一索引
`ALTER TABLE societe_temp ADD UNIQUE idx_societe_temp_tva_intra (tva_intra);`
然后将 excel 文件中的记录插入到此 table 中,从而避免任何重复记录。
第二步从temptablesociete_temp
获取记录并插入mastertable'societe'
我知道这不是最佳解决方案,但它是一种可以在某一天帮助某人的解决方法。
我查看了一些类似的问题,但找不到解决方案。所以我从 excel table 导入数据。数据包含公司名称、公司唯一编号、城市和地址。
我需要的是检查数据库中是否存在唯一编号,如果存在 - 跳过,如果不存在 - 创建记录。下面是我的代码,它循环遍历行:
for ($i = $data_start_row; $i < $sheetCount + 1; $i++) {
$externalsales->eik = $spreadSheetAry[$i][$client_eik];
if ($externalsales->getSocieteByBulstat() > 0) {
continue;
} else {
$importfromexcel->nom = $spreadSheetAry[$i][$client_name];
$importfromexcel->address = $spreadSheetAry[$i][$client_address];
$importfromexcel->town = $spreadSheetAry[$i][$client_city];
$importfromexcel->tva_intra = $spreadSheetAry[$i][$client_eik];
$importfromexcel->userId = $user->id;
$importfromexcel->insertSocieteRecord();
}
}
问题是,有时文件中有不止一行,缺少记录的数据相同,因此在数据库中创建了重复项。我怎样才能避免这种情况?
尝试使用 goto start;
,其中 start:
在 for 循环之前,但这不起作用(第一个丢失记录的记录束像 +500 个重复一样插入)。
将其中一列设置为唯一是我最后的选择,但我更喜欢在脚本中进行。
因此,对于偶然发现这里的任何人,我的最终解决方案如下:
由于数据库的某些限制,我无法为目标 table societe
中的字段 tva_intra
设置唯一索引,所以我切换到 2 步处理
第一步: 我创建了自定义 table societe_temp
,具有与问题中描述的相同字段,为此 table我能够为字段 tva_intra
:
`ALTER TABLE societe_temp ADD UNIQUE idx_societe_temp_tva_intra (tva_intra);`
然后将 excel 文件中的记录插入到此 table 中,从而避免任何重复记录。
第二步从temptablesociete_temp
获取记录并插入mastertable'societe'
我知道这不是最佳解决方案,但它是一种可以在某一天帮助某人的解决方法。