我有一个CSV文件,我循环获取一个如下所示的数组od数据:
$data[0]['StockNumber']
此数组为400个不同的行。 我需要将这些值与我的数据库进行比较并执行3操作。
从我的数据库中选择数据并作为对象返回。
如果我的数据库中存在$ data [0] ['stockNumber'],我想更新我的数据库。 如果$ data [0] ['stockNumber']不存在,我想添加到我的数据库。
之后,如果我的数据库中存在库存号但我的CSV中没有库存号,我想从我的数据库中删除。
我该如何循环呢?
这是我正在使用的代码
function ImportCSV2Array($filename)
{
$row = 0;
$col = 0;
$handle = @fopen($filename, "r");
if ($handle)
{
while (($row = fgetcsv($handle, 4096,'|','"')) !== false)
{
if (empty($fields))
{
$fields = $row;
continue;
}
foreach ($row as $k=>$value)
{
$results[$col][$fields[$k]] = $value;
}
$col++;
unset($row);
}
if (!feof($handle))
{
echo "Error: unexpected fgets() failn";
}
fclose($handle);
}
return $results;
}
$csvArray = ImportCSV2Array($filename);
print_r($csvArray[4]['StockNumber']);
"SELECT StockNumber FROM my_table"
$result = $conn->query($sql);
现在,我如何检查$ result中的所有价值与$ results
中的值答案 0 :(得分:1)
IMO您解决此任务的方法是错误的。
以下是我将如何做到这一点。
1-在mysql中创建临时表,解析CSV文件&将文件数据添加到临时表中。
2-如果原始表中存在ID,则运行单个查询更新数量或其他任何内容。
update `original_table` `ot` set `ot`.quantity = `t`.`quantity`
inner join temp_table `t` on ot.id = t.id
3-运行单个查询,删除临时表中不存在的产品
delete from `original_table` WHERE `id` NOT IN(SELECT `id` FROM `temp_table`)
4-运行单个查询,添加临时表中但不在原始表中的产品。
eg: INSERT INTO `original_table` (`id`, `name` ...) SELECT `id`, `name` ... FROM `temp_table` WHERE `temp_table`.`id` NOT IN(SELECT `id` FROM `original_table`)
这种方法整个过程需要几秒钟。
当然,这只是一个例子,首先尝试使用本地数据,看看在投入生产之前一切正常。