我有一个客户想要让所有没有价格的产品出现在所有有价格的产品背后。在这种情况下,我会将产品位置更改为999.但是他们有超过3,000种产品,手动需要几个小时。
有没有办法通过MySQL更新这个?我必须连接我知道的两张桌子。 catalog_category_product
和catalog_product_entity_decimal
我相信它是。
现在我知道catalog_category_product
有一个名为product_id
的字段,catalog_product_entity_decimal
有一个名为entity_id
的字段,基本上是相同的。
我认为必须有办法以某种方式将它们连接起来以实现这一目标。
编辑:是的,我知道有一个排序依据可以做到这一点,但他们不希望最高价格显示为默认的最低价格。他们希望能够在第一次折叠时定位他们想要的物品。
答案 0 :(得分:0)
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;
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;