Обновление цены массово в magento - PullRequest
3 голосов
/ 14 октября 2011

Мне нужно обновить цену на все товары в некоторых категориях на 10%. Проблема в том, что я должен округлить его до 0,99 цента

Если цена 120 * 0,90 = 118,8, но я должен поставить 118,99

РЕДАКТИРОВАТЬ: я забыл упомянуть, некоторые из моих продуктов имеют ценовые уровни, поэтому цены также должны быть снижены на 10%

EDIT:

Следующий код обновляет цену на 10%, однако я не знаю, как округлить до 0,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 ]

4 голосов
/ 15 октября 2011

Вы абсолютно уверены, что цены сами должны быть изменены?С таким же успехом вы можете сделать скидку в 10% всем клиентам (вошли в систему и не вошли одинаково), и результат будет точно таким же, и вы избавите себя от необходимости менять все цены, потому что неспособ сделать это.

Лучшим способом сделать это был бы короткий php-скрипт (поскольку экспорт / импорт продукта не поддерживает ценовые уровни) или внешнее приложение, которое поддерживает magento в качестве источника и цели данных.

3 голосов
/ 15 октября 2011

Вы можете обновить каталог цен:

См. Ответ @ 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 голосов
/ 15 октября 2011

Используйте функцию 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) или сделать копию текущих цен каталога в другой таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...