在magento中大量更新价格

时间:2011-10-14 19:48:23

标签: mysql magento

我需要将某些类别的所有产品的价格更新10%。 问题是我必须把它四舍五入到.99美分

如果价格是120 * 0.90 = 118.8,但我必须把118.99

编辑:我忘了提及,我的部分产品都有等级定价,因此等级价格也需要降低10%

编辑:

以下代码更新价格10%,但我不知道如何舍入到.99。而最困难的部分是如何使用层级定价> ??

来实现
update catalog_product_entity_decimal
  set value = value*0.9
  where attribute_id = 64 and
        entity_in (select product_id from catalog_category_product
                    where category_id = X);

任何人都知道如何对此进行查询?我不是mysql的忠实粉丝:)

谢谢

3 个答案:

答案 0 :(得分:4)

您是否绝对确定价格本身必须改变?您也可以向所有客户提供10%的折扣(登录并且不同等登录),结果将完全相同,您可以节省更改所有价格的麻烦,因为没有自动化这样做的方法。

最好的方法是使用简短的PHP脚本(因为产品导出/导入不支持层价)或支持magento作为数据源和目标的外部应用程序。

答案 1 :(得分:3)

您可以更新价格目录:

请参阅@ ypercube的回答

或者您可以使用选择来应用折扣

SELECT CIEL((cpe.value * 0.9)  + 0.01) - 0.01 as Discounted_price
FROM catalog_product_entity_decimal cpe
WHERE cpe.attribute_id = 64 
  AND cpe.entity IN (SELECT ccp.product_id FROM catalog_category_product ccp
                WHERE ccp.category_id = 'X');

让我离开你的代码:

等级定价

SELECT 
  b.product_id
  ,pr.name
  ,CIEL((p.price * d.percentage) + 0.01) - 0.01 as discounted_price
FROM basket b
INNER JOIN product pr ON (b.product_id = pr.id)
INNER JOIN price p ON (p.product_id = pr.id 
                  AND b.sale_date BETWEEN p.valid_from AND p.valid_till) 
INNER JOIN discount d ON (pr.productcat = d.productcat
                      AND b.quantity BETWEEN d.min_cty AND d.max_qty
                      AND b.sale_date BETWEEN d.valid_from AND d.valid_till) 
WHERE b.transaction_nr = '12457'; 

请参阅:http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html#function_ceiling

答案 2 :(得分:2)

使用CEILING()功能,然后减去0.01

update catalog_product_entity_decimal
  set value = CEILING(value*0.9 +0.01) - 0.01 
  where attribute_id = 64 and
        entity_in (select product_id from catalog_category_product
                    where category_id = X);

或:

update catalog_product_entity_decimal
  set value = CEILING(value*0.9) - 0.01 
  where attribute_id = 64 and
        entity_in (select product_id from catalog_category_product
                    where category_id = X);

第一个版本会将{值* 0.9)(如果在100.99001101.00之间舍入到101.99,而第二个版本会将它们舍入为100.99

确实,确保只运行一次

对表格或至少(where attribute_id = 64)部分进行备份或在另一个表格中复制当前目录价格也是明智之举。