gpt4 book ai didi

php - 如何在一个脚本中多次使用 SELECT (500 000) 次?

转载 作者:太空宇宙 更新时间:2023-11-03 12:35:21 24 4
gpt4 key购买 nike

我正在尝试通过更新或将新产品从文件 (csv) 插入数据库来解决问题。

问题是 CSV 文件中只有产品的编号和供应商。所以我需要为每个产品查找带有此供应商和编号的 ID。如果找不到产品,我需要插入新产品,否则我将只更新存储信息和价格。

那个 csv 有 500 000 个产品 (34MB)。

现在我正在用这样的代码解决这个问题(但是脚本在 50 000 个文件行后停止,因为没有内存空间(使用 2GB):

        while (!feof($file_handle)) 
{
$data = fgetcsv($file_handle,5096,$i->column_separator);

if($row >= ($i->firstrow-1) && !empty($data[$i->column_product_code-1]) && !empty($data[$i->column_product_name-1]) && !empty($data[$i->column_price-1]) && $data[$i->column_price-1] > 0)
{
@$code = str_replace(array(' ','.','-','/'),'',$data[$i->column_product_code-1]);
@$supplier = iconv('WINDOWS-1250','UTF-8', $data[$i->column_producer_name-1]);
@$name = iconv('WINDOWS-1250','UTF-8', $data[$i->column_product_name-1]);

$article = $articleModel->searchImport($code,$supplier,isset($data[$i->column_producer_code-1]) ? $data[$i->column_producer_code-1]:NULL);

if($article !== FALSE)
{
$importqueueModel->update()
}
else
{
$importqueueModel->insert()
}

我无法找出任何不同的步骤来匹配文件中的产品代码和供应商以从数据库中获取 ID,以便我可以更新或将新产品插入回数据库中。

请帮忙,任何提示将不胜感激。

谢谢

最佳答案

根据一般经验,如果您认为需要在一个脚本中运行数百个查询,那您就错了。几千?大错特错。

不要将 CSV 中的数据直接加载到已经包含实时数据的目标表中 - 将其加载到暂存表中 - 然后单个插入....选择将填充相关记录:

INSERT INTO suppliers (name, status)
SELECT c.supplier, 'new'
FROM csv_imported c
LEFT JOIN suppliers s
ON c.supplier=s.name
WHERE s.name is NULL
AND c.supplier IS NOT NULL;

并且使用 mysqlimport/load data infile 也消除了对大量代码的需要。

because of no memory space (used 2GB)

即使以错误的方式进行操作也不会导致此问题 - 您的代码中存在错误。

关于php - 如何在一个脚本中多次使用 SELECT (500 000) 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13484085/

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