【问题标题】:How do you set the special_price of product in magento via direct SQL query?如何通过直接 SQL 查询在 magento 中设置产品的 special_price?
【发布时间】:2014-11-28 10:37:19
【问题描述】:

我需要从 CSV 文件中批量更新特价(告诉我 sku、特价、到/起日期)。

目前我在 foreach 循环中使用这样的 magento 模型方法(在解析 CSV 行之后):

$p = Mage::getModel('catalog/product');
$product_id = $p->getIdBySku($product['SKU']);
if (!$product_id) {
    throw new Exception('Product Does Not Exists');
}
$p->setStoreId($store_id)->load($product_id);
$p->setSpecialPrice(floatval($product['Price']));
$p->setSpecialFromDate($product['FromDate']);
$p->setSpecialFromDateIsFormated(true);
$p->setSpecialToDate($product['ToDate']);
$p->setSpecialToDateIsFormated(true);
$p->save();
$p = null;

当少数产品需要更新时,这没关系。但是,当您更新 100 多种产品时,这会变得异常缓慢,并且还会影响网站性能。

我是否可以批量导入特价并通过直接 SQL 查询设置日期?


在研究这个问题时,我找到了一个可能的解决方案(基于这篇文章http://fishpig.co.uk/magento/tutorials/update-prices-sql),直接在数据库中设置special_price,如下所示:

注意:bd_ 是我的表前缀

UPDATE bd_catalog_product_entity AS CPE
INNER JOIN bd_catalog_product_entity_decimal AS CPED ON CPED.entity_id = CPE.entity_id
SET CPED.`value` = 2.99 -- New Special Price
WHERE
    CPED.attribute_id = (
        SELECT
            attribute_id
        FROM
            bd_eav_attribute eav
        WHERE
            eav.entity_type_id = 4
        AND eav.attribute_code = 'special_price'
    )
AND CPED.store_id = 1   -- Retail Store
AND CPE.sku = 'ABS049'  -- Sku Being Updated

似乎正在工作(我可以看到 magento UI 中的值已更新)。我还不确定这是否是直接在数据库中设置特价的正确方法。

另外,我还没有弄清楚如何设置 from/to 日期。

对此的任何帮助将不胜感激。

【问题讨论】:

  • 我只能告诉你,直接在数据库中更改内容(通过查询)迟早会咬到你。您使用的方法是正确的。我相信您在自定义 Magento CLI 脚本中运行它?在运行脚本之前尝试禁用索引的自动更新,然后启用它们(并重新运行它们)。这将占用您的执行时间...

标签: php mysql magento


【解决方案1】:

我建议您使用数据流配置文件。 (我猜你已经知道它的用法了,我正在写下这个过程,以防它对不知道 Dataflow Profiles 用法的人有所帮助)

  1. 转到系统-> 导入/导出-> 数据流配置文件
  2. 运行导出所有产品配置文件。
  3. 从导出到您的 magento 的 var/export 目录的 csv 中,提取您希望插入/更新其特价的产品。
  4. 在您要导入的新 csv 中更新 special_from_datespecial_to_datespecial_price 字段的值。
  5. 通过运行“导入所有产品配置文件”导入您刚刚创建的新 csv。

这是一个非常可靠的方法。希望对你有帮助!!

【讨论】:

  • 我实际上忘记了这个......决定使用它,而不是重新发明轮子。谢谢提醒。
  • 我很高兴它有帮助。
【解决方案2】:

我建议将 INSERT 与 ON DUPLICATE KEY 一起使用,而 special_price 属性的值可能尚不存在。没有测试您的 SQL,但它看起来不错 - 需要处理的关键是

  1. 从 eav_attribute 中检索正确的 attribute_id(未重新 提示:不要在子查询中这样做,因为性能会受到影响 从中)
  2. 从 catalog_product_entity 中按 SKU 查找产品的 entity_id

要记住的另一件事是,当您使用可配置产品时,您可能也应该设置可配置产品的价格,以及所有简单的事情(但这取决于您的业务方法)

【讨论】:

    【解决方案3】:

    这两个选项都可以使用,但您必须在第二个选项中重新索引数据。我在我的一个项目中使用相同的 sql 来设置销售价格。我在 cron 文件中使用它。

    如果您有大量产品,直接查询将节省您的时间。

    Mage::getModel('index/process')->load(2)->reindexAll();
    

    php indexer.php --reindex catalog_product_price
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多