首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Magento大宗价格变动

Magento大宗价格变动
EN

Stack Overflow用户
提问于 2011-02-28 18:47:52
回答 4查看 9.5K关注 0票数 5

我想做的是,对某一类别的产品进行大宗价格变动。我们从我们的供应商那里得到建议的零售价,但有时这些并不适用于我们。所以我们需要以产品的成本价格为例,再加上20%的产品。容易的成本=成本+0.2*成本。现在我需要对选定类别中的所有产品这样做,下面是我到目前为止.

代码语言:javascript
复制
$category = Mage::getModel('catalog/category')->load(189); 

// load products from category id '189'
$products   = Mage::getModel('catalog/product')
                ->getCollection()  
                ->addCategoryFilter($category)  
                ->addAttributeToSelect('id'); 

foreach($products as $product) { 
    // get the current cost of the product
    $cost = $db->fetchRow("SELECT value FROM `m_catalog_product_entity_decimal` WHERE entity_id='" . $product->getId() . "' AND attribute_id='68'");
    $cost = $cost['value']; 
    $newCost = $cost + $cost*$percentage; 

    // update the product with a new cost
    $db->query("UPDATE `m_catalog_product_entity_decimal` SET value='$newCost' WHERE entity_id='" . $product->getId() . "' AND attribute_id='64'"); 
}

现在,我需要使用原始SQL,因为我的php服务器无法处理所有magento产品的加载和保存(Magento1.4在产品模型中有内存泄漏)。这就是为什么我简单地从产品中选择"id“,以获得最少的数据量。我也明白,执行所有这些SQL查询都是浪费资源,这就是我来这里的原因。如果我的每个类别只有10个产品,我会使用产品模型更新成本和节省产品,但有时我有多达500或更多的产品在一个类别作为一次。

我希望将它压缩为一个SQL查询,并去掉foreach循环和产品集合。成本属性id为68,价格属性id为64。如果能在这方面提供任何帮助,我将不胜感激。

编辑

Magento使用EAV模型作为他们的数据库。因此,对于我需要访问的属性,即“成本”和“价格”,它们都位于m_catalog_product_entity_decimal中。

因此,在表中,产品价格属性将如下所示

代码语言:javascript
复制
value_id    entity_type_id  attribute_id    store_id    entity_id   value
6401             4              64             0            2184      399.9500

value_id只是行的唯一值,entity_type_id 4表示这是一个产品属性。attribute_id与实际属性相关联。在这种情况下,64是“价格”的attribute_id。Store_id是无关紧要的。Entity_id是实际的产品id,值是项目的实际价格。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-28 21:06:09

老实说,B00MER的想法是正确的,但我以前也不得不做类似的事情。另外,我想写一点SQL。如果您只想将一个类别中的所有产品的成本乘以1.2,您可以这样做:

代码语言:javascript
复制
update catalog_product_entity_decimal
  set value = value*1.2
  where attribute_id = 75 and
        entity_id IN (select product_id from catalog_category_product
                    where category_id = X);

您无疑需要重新索引所有内容,并检查结果以确保。显然,用目标类别替换X,并且您似乎使用了m_的表前缀,所以也要附加这个前缀(我把它留给其他来这里的搜索者使用)。

希望这能帮上忙!

谢谢你,乔

票数 10
EN

Stack Overflow用户

发布于 2011-02-28 20:25:36

远离Magento的ORM (因为它可能需要资源)并不是一个好主意。这里有一个用于1.4CE内存泄漏的修补程序和我会用"Magento“的方式来做这件事,这样就省去了所需的丢失或部分数据带来的麻烦。你也可以考虑大学数据RapidFlow,昂贵的价格标签,但是如果你不得不经常管理大量的产品/类别数据的话,你的每一分钱都是值得的。

票数 2
EN

Stack Overflow用户

发布于 2011-03-01 15:41:14

考虑一下麦格米,它可以做这样的事情和更多的事情,并且使用直接的SQL。它也适用于多家商店的设置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5146195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档