Magento:根据价格更改类别中的产品位置

时间:2016-07-08 15:23:36

标签: mysql magento

我有一个客户想要让所有没有价格的产品出现在所有有价格的产品背后。在这种情况下,我会将产品位置更改为999.但是他们有超过3,000种产品,手动需要几个小时。

有没有办法通过MySQL更新这个?我必须连接我知道的两张桌子。 catalog_category_productcatalog_product_entity_decimal我相信它是。

现在我知道catalog_category_product有一个名为product_id的字段,catalog_product_entity_decimal有一个名为entity_id的字段,基本上是相同的。

我认为必须有办法以某种方式将它们连接起来以实现这一目标。

编辑:是的,我知道有一个排序依据可以做到这一点,但他们不希望最高价格显示为默认的最低价格。他们希望能够在第一次折叠时定位他们想要的物品。

1 个答案:

答案 0 :(得分:0)

1。在此类操作之前始终执行数据库备份

2。用它来检查你的结果是否正确:

SELECT *
FROM `catalog_category_product` AS `cpe`
INNER JOIN (
    SELECT `e`.`entity_id`
    FROM `catalog_product_entity` AS `e`
        INNER JOIN `eav_attribute` AS `ea` ON `ea`.`attribute_code` = 'price'
        INNER JOIN `catalog_product_entity_decimal` AS `at_price` ON (`at_price`.`entity_id` = `e`.`entity_id`) AND (`at_price`.`attribute_id` = `ea`.`attribute_id`)
    WHERE ((at_price.value = '0') OR (((at_price.value = 'price') OR (at_price.value = '1'))))
         ) AS `result` ON cpe.product_id = result.entity_id;

3。这是为了更新位置值:

UPDATE `catalog_category_product` AS `cpe`
INNER JOIN (
    SELECT `e`.`entity_id`
    FROM `catalog_product_entity` AS `e`
        INNER JOIN `eav_attribute` AS `ea` ON `ea`.`attribute_code` = 'price'
        INNER JOIN `catalog_product_entity_decimal` AS `at_price` ON (`at_price`.`entity_id` = `e`.`entity_id`) AND (`at_price`.`attribute_id` = `ea`.`attribute_id`)

    WHERE ((at_price.value = '0') OR (((at_price.value = 'price') OR (at_price.value = '1'))))
) AS `result` ON cpe.product_id = result.entity_id
SET `cpe`.`position` = 999;

4。请注意,此代码不适用于多重存储。

5。自担风险使用它:)