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
Amit Bera
fonte
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')
Pradeep Sanku
fonte
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));
David G. Varela
fonte
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
Klemart3D
fonte