Php 如何在magento中替换5000个产品的sku号

Php 如何在magento中替换5000个产品的sku号,php,mysql,magento,Php,Mysql,Magento,我有一个包含两列的.csv文件 例如: 旧sku新sku 123 456 我想用新的sku编号替换每个产品的sku编号 我的店里有5000多种产品 提前感谢Magento不便于批量更换SKU。尝试通过导入/导出或数据流配置文件执行此操作会遇到各种问题。然而,有一种相当简单的方法可以做到这一点,它只需要在服务器上添加一个php脚本和一个SKU前后的CSV文件。这里是一步一步 注意:在对所有SKU进行测试之前,请确保仅对一个或两个产品SKU进行测试。此外,在尝试此操作之前,请确保备份数据库 创建包含

我有一个包含两列的.csv文件

例如:

旧sku新sku

123 456

我想用新的sku编号替换每个产品的sku编号

我的店里有5000多种产品


提前感谢

Magento不便于批量更换SKU。尝试通过导入/导出或数据流配置文件执行此操作会遇到各种问题。然而,有一种相当简单的方法可以做到这一点,它只需要在服务器上添加一个php脚本和一个SKU前后的CSV文件。这里是一步一步

注意:在对所有SKU进行测试之前,请确保仅对一个或两个产品SKU进行测试。此外,在尝试此操作之前,请确保备份数据库

创建包含SKU之前和之后的CSV文件 在第一列中列出当前SKU,在第二列中列出新SKU。 不要在CSV文件中包含标题

确保此文件以UTF-8或ANSI编码保存为CSV文件。如果使用Excel创建文件,则可能会遇到此问题

将CSV文件放在服务器上 将CSV文件上载到Magento服务器上的var/export目录,使其路径为/var/export/sku2sku.CSV

创建PHP脚本 在您的服务器上,在您的Magento安装目录中,即您看到应用程序、var、skin、media、js和其他目录的目录中,创建一个新文件,保存它,并将其命名为“updateskus.php”

将以下php代码粘贴到updateskus.php中并保存文件

<?php

include_once './app/Mage.php';
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$updates_file="./var/export/sku2sku.csv";
$sku_entry=array();
$updates_handle=fopen($updates_file, 'r');
if($updates_handle) {
while($sku_entry=fgetcsv($updates_handle, 1000, ",")) {
$old_sku=$sku_entry[0];
$new_sku=$sku_entry[1];
echo "<br>Updating ".$old_sku." to ".$new_sku." - ";
try {
$get_item = Mage::getModel('catalog/product')->loadByAttribute('sku', $old_sku);
if ($get_item) {
$get_item->setSku($new_sku)->save();
echo "successful";
} else {
echo "item not found";
}
} catch (Exception $e) {
echo "Cannot retrieve products from Magento: ".$e->getMessage()."<br>";
return;
}
}
}
fclose($updates_handle);
?>
运行脚本 要运行脚本,只需使用internet浏览器并导航到。如果您有多站点设置,请使用主机提供商设置的主站点或主站点。 当页面打开时,您将看到SKU已更新的确认消息。您的SKU现在应该已成功更新

如果已完成SKU更新,请删除添加到服务器的CSV和PHP文件

错误 如果您遇到以下错误,不要太担心。只需重新运行脚本,看看是否有更多SKU得到更新。 无法从Magento检索产品:SQLSTATE[40001]:序列化失败:尝试获取锁时发现1213死锁;尝试重新启动事务


如果您有很多SKU需要更新,您可以预期脚本至少需要几分钟才能完成。

Magento不便于批量更改SKU。尝试通过导入/导出或数据流配置文件执行此操作会遇到各种问题。然而,有一种相当简单的方法可以做到这一点,它只需要在服务器上添加一个php脚本和一个SKU前后的CSV文件。这里是一步一步

注意:在对所有SKU进行测试之前,请确保仅对一个或两个产品SKU进行测试。此外,在尝试此操作之前,请确保备份数据库

创建包含SKU之前和之后的CSV文件 在第一列中列出当前SKU,在第二列中列出新SKU。 不要在CSV文件中包含标题

确保此文件以UTF-8或ANSI编码保存为CSV文件。如果使用Excel创建文件,则可能会遇到此问题

将CSV文件放在服务器上 将CSV文件上载到Magento服务器上的var/export目录,使其路径为/var/export/sku2sku.CSV

创建PHP脚本 在您的服务器上,在您的Magento安装目录中,即您看到应用程序、var、skin、media、js和其他目录的目录中,创建一个新文件,保存它,并将其命名为“updateskus.php”

将以下php代码粘贴到updateskus.php中并保存文件

<?php

include_once './app/Mage.php';
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$updates_file="./var/export/sku2sku.csv";
$sku_entry=array();
$updates_handle=fopen($updates_file, 'r');
if($updates_handle) {
while($sku_entry=fgetcsv($updates_handle, 1000, ",")) {
$old_sku=$sku_entry[0];
$new_sku=$sku_entry[1];
echo "<br>Updating ".$old_sku." to ".$new_sku." - ";
try {
$get_item = Mage::getModel('catalog/product')->loadByAttribute('sku', $old_sku);
if ($get_item) {
$get_item->setSku($new_sku)->save();
echo "successful";
} else {
echo "item not found";
}
} catch (Exception $e) {
echo "Cannot retrieve products from Magento: ".$e->getMessage()."<br>";
return;
}
}
}
fclose($updates_handle);
?>
运行脚本 要运行脚本,只需使用internet浏览器并导航到。如果您有多站点设置,请使用主机提供商设置的主站点或主站点。 当页面打开时,您将看到SKU已更新的确认消息。您的SKU现在应该已成功更新

如果已完成SKU更新,请删除添加到服务器的CSV和PHP文件

错误 如果您遇到以下错误,不要太担心。只需重新运行脚本,看看是否有更多SKU得到更新。 无法从Magento检索产品:SQLSTATE[40001]:序列化失败:尝试获取锁时发现1213死锁;尝试重新启动事务


如果要更新大量SKU,则脚本至少需要几分钟才能完成。

要获得最佳性能,请使用:

$get_item->setSku$new_sku;
$get_item->getResource->saveAttribute$new_sku,'sku' 要获得最佳性能,请使用:

$get_item->setSku$new_sku;
$get_item->getResource->saveAttribute$new_sku,'sku' 这段代码对我来说非常快。我用它

<?php

$mageFilename = 'app/Mage.php';
require_once $mageFilename;
Mage::setIsDeveloperMode(true);

ini_set('display_errors', 'Off');
umask(0);
Mage::app('admin');
Mage::register('isSecureArea', 1);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

set_time_limit(0);
ini_set('memory_limit','1024M');

    $resource = Mage::getSingleton('core/resource');
    $writeConnection = $resource->getConnection('core_write');


$updates_file="./var/export/sku2sku.csv";
$sku_entry=array();
$updates_handle=fopen($updates_file, 'r');
if($updates_handle) {
while($sku_entry=fgetcsv($updates_handle, 1000, ",")) {
$old_sku=$sku_entry[0];
$new_sku=$sku_entry[1];
echo "<br>Updating ".$old_sku." to ".$new_sku." - ";
try {
$get_item = Mage::getModel('catalog/product')->loadByAttribute('sku', $old_sku);
if ($get_item) {
    $product_id = $get_item->getId();
    $writeConnection->update(
            "catalog_product_entity",
            array("sku" => $new_sku),
            "entity_id=$product_id"
    );
echo "successful";
} else {
echo "item not found";
}
} catch (Exception $e) {
echo "Cannot retrieve products from Magento: ".$e->getMessage()."<br>";
return;
}
}
}
fclose($updates_handle);
?>

这段代码对我来说非常快。我用它

<?php

$mageFilename = 'app/Mage.php';
require_once $mageFilename;
Mage::setIsDeveloperMode(true);

ini_set('display_errors', 'Off');
umask(0);
Mage::app('admin');
Mage::register('isSecureArea', 1);
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

set_time_limit(0);
ini_set('memory_limit','1024M');

    $resource = Mage::getSingleton('core/resource');
    $writeConnection = $resource->getConnection('core_write');


$updates_file="./var/export/sku2sku.csv";
$sku_entry=array();
$updates_handle=fopen($updates_file, 'r');
if($updates_handle) {
while($sku_entry=fgetcsv($updates_handle, 1000, ",")) {
$old_sku=$sku_entry[0];
$new_sku=$sku_entry[1];
echo "<br>Updating ".$old_sku." to ".$new_sku." - ";
try {
$get_item = Mage::getModel('catalog/product')->loadByAttribute('sku', $old_sku);
if ($get_item) {
    $product_id = $get_item->getId();
    $writeConnection->update(
            "catalog_product_entity",
            array("sku" => $new_sku),
            "entity_id=$product_id"
    );
echo "successful";
} else {
echo "item not found";
}
} catch (Exception $e) {
echo "Cannot retrieve products from Magento: ".$e->getMessage()."<br>";
return;
}
}
}
fclose($updates_handle);
?>

以下代码说明如何基于CSV文件中的旧sku批量更新产品sku。请参阅 一步一步解释教程。


下面的代码解释了如何基于CSV文件中的旧sku批量更新产品sku。请参阅教程以获得逐步解释。


我采纳了这两个建议并创建了updateSkus.php

将它放在magento中的shell目录中,可以通过以下方式运行:php updateSkus.php-filename skus.csv

skus.csv应该是旧sku的逗号列表,类似newSku,每个sku对之间有一个新行

奥尔德斯库,纽斯库

奥尔德斯库,纽斯库

奥尔德斯库,纽斯库

updateSkus.php


我采纳了这两个建议并创建了updateSkus.php

将它放在magento中的shell目录中,可以通过以下方式运行:php updateSkus.php-filename skus.csv

skus.csv应该是旧sku的逗号列表,类似newSku,每个sku对之间有一个新行

奥尔德斯库,纽斯库

奥尔德斯库,纽斯库

奥尔德斯库,纽斯库

updateSkus.php



使用foreach循环如何,查找数据,然后在找到数据时替换它……感谢您的回答。也许你出了什么问题。我有excel文件。我想问的是,在magento或mysql中是否有任何内置设备可以将我当前的sku号替换为新的sku号。我只是导入excel文件。我把你的选项放在最后一个选项中,制作一个php脚本,读取excel文件,并用新的替换现有的sku。对于SQL来说,这似乎是一项伟大的工作,不需要编程。我假设你在某处有某种旧的、新的sku关系?@JimitShah它清楚地说.csv:/magento将sku信息存储在许多不同的表中。我想知道任何简单的选择,我只是上传一个新的.csv文件与旧的和新的sku代码。将sku代码从旧代码替换为新代码?使用foreach循环如何,查找数据,然后在找到数据时进行替换…感谢lawrenece的回答。也许你出了什么问题。我有excel文件。我想问的是,在magento或mysql中是否有任何内置设备可以将我当前的sku号替换为新的sku号。我只是导入excel文件。我把你的选项放在最后一个选项中,制作一个php脚本,读取excel文件,并用新的替换现有的sku。对于SQL来说,这似乎是一项伟大的工作,不需要编程。我假设你在某处有某种旧的、新的sku关系?@JimitShah它清楚地说.csv:/magento将sku信息存储在许多不同的表中。我想知道任何简单的选择,我只是上传一个新的.csv文件与旧的和新的sku代码。将sku代码从旧代码替换为新代码?为每行加载和保存整个产品型号将消耗5000个产品的大量内存,并且可能会失败。对于这样的工作,我建议使用Mage_Core_Model_Resource_迭代器,甚至直接SQL查询。为每行加载和保存整个产品模型将消耗5000个产品的大量内存,并且可能会失败。对于这样的工作,我建议使用Mage_Core_Model_Resource_迭代器,甚至是直接SQL查询。由于这些代码帮助了您,这对开场白来说并不是一个有用的答案,因为您没有针对他的问题更改它,也没有给出任何解释。请通过编辑您的答案来提供更多信息。这工作很快。刚刚试过。不要忘记将catalog\u product\u实体更改为带有后缀的表名:很好。唯一的问题是有点慢。。。每个SKU节省6秒因为这些代码帮助了你,这对开场白来说不是一个有用的答案,因为你没有为他的问题更改它,也没有给出任何解释。请通过编辑您的答案来提供更多信息。这工作很快。刚刚试过。不要忘记将catalog\u product\u实体更改为带有后缀的表名:很好。唯一的问题是有点慢。。。每次SKU更新保存6秒此操作无效:SKU的保存属性。SKU不是EAV属性,需要以不同的方式保存/更新…更新此选项无效:SKU的saveAttribute。SKU不是EAV属性,需要以不同方式保存/更新。。。