Como listar todos os produtos desativados com sql?


Respostas:


25

Como produto magento, segue a estrutura do EAV que

Você precisa escrever uma consulta entre eav_attributee catalog_product_entity_inttabela

Magento salva o status do produto na tabela da catalog_product_entity_inttabela. Salve-o como 1 e 2.

  • 1 para ativar
  • 2 para desativar.

Você precisa obter o ID do atributo de status usando o código do atributo status, basicamente é 96.

Inquerir:

SELECT entity_id FROM `catalog_product_entity_int`
WHERE attribute_id = (
    SELECT attribute_id FROM `eav_attribute`
    WHERE `attribute_code` LIKE 'status'
) AND `catalog_product_entity_int`.value = 2

5

Consulta Magento

$productsCollection = Mage::getModel('catalog/product')->getCollection()
                    ->addAttributeToFilter('status', 2); // added enabled

Consulta Mysql

SELECT `e`.*, IF(at_status.value_id > 0, at_status.value, at_status_default.value) AS `status` 
FROM `catalog_product_entity` AS `e` 
INNER JOIN `catalog_product_entity_int` AS `at_status_default` 
 ON (`at_status_default`.`entity_id` = `e`.`entity_id`)
  AND (`at_status_default`.`attribute_id` = '96') 
  AND `at_status_default`.`store_id` = 0 
LEFT JOIN `catalog_product_entity_int` AS `at_status` 
 ON (`at_status`.`entity_id` = `e`.`entity_id`) 
  AND (`at_status`.`attribute_id` = '96') 
  AND (`at_status`.`store_id` = 1) 
WHERE (IF(at_status.value_id > 0, at_status.value, at_status_default.value) = '2')

0

Por cargo de Amits - eu precisava encontrar os itens "desativados" (valor 2). Aqui está uma consulta atual do mysql com alguns campos extras que usei para solucionar problemas de quais produtos realmente precisam ser "Ativados"

select
  `eav_attribute`.`attribute_id` AS `attribute_id`,
  `catalog_product_entity_int`.`entity_id` AS `entity_id`,
  `catalog_product_entity_int`.`value` AS `value`,
  `eav_attribute`.`attribute_code` AS `attribute_code`,
  `catalog_product_entity`.`sku` AS `sku`,
  `catalog_product_entity`.`created_at` AS `created_at`,
  `catalog_product_entity`.`updated_at` AS `updated_at`
from
  ((`eav_attribute`
  join `catalog_product_entity_int` on ((`eav_attribute`.`attribute_id` = `catalog_product_entity_int`.`attribute_id`)))
  join `catalog_product_entity` on ((`catalog_product_entity_int`.`entity_id` = `catalog_product_entity`.`entity_id`)))
where
  ((`eav_attribute`.`attribute_code` = 'status') and
  (`catalog_product_entity_int`.`value` = 2));

2
Fabian ... Obrigado pela formatação. Muito mais fácil para os outros usarem.
David G. Varela

0

A resposta do @Amit Bera é a melhor, mas a solicitação SQL não funciona se você tiver mais de um código de atributo chamado "status" (no meu caso, tenho um total de 5 linhas de "status") e o MySQL retornará: #1242 - Subquery returns more than 1 rowerro.

Portanto, concluo a consulta SQL adicionando o source_model como 'catalog / product_status' assim:

SELECT entity_id FROM `catalog_product_entity_int`
WHERE attribute_id = (
   SELECT attribute_id FROM `eav_attribute`
   WHERE `attribute_code` LIKE 'status'
   AND `source_model` LIKE 'catalog / product_status'
) AND `catalog_product_entity_int`.value = 2
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.