我需要将某些类别的所有产品的价格更新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的忠实粉丝:)
谢谢
答案 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.99001
和101.00
之间舍入到101.99
,而第二个版本会将它们舍入为100.99
。
确实,确保只运行一次。
对表格或至少(where attribute_id = 64
)部分进行备份或在另一个表格中复制当前目录价格也是明智之举。