¿Cómo enumerar todos los productos deshabilitados con sql?

Respuestas:

25

Como producto magento sigue la estructura EAV que

Necesita escribir una consulta entre eav_attributey catalog_product_entity_inttabla

Magento guarda el estado del producto en la tabla de la catalog_product_entity_inttabla. Guárdelo como 1 y 2.

  • 1 para habilitar
  • 2 para deshabilitar.

Debe obtener la identificación del atributo de estado utilizando el código de atributo status, básicamente es 96.

Consulta:

SELECCIONE entidad_ID DE `catalog_product_entity_int`
DONDE atributo_id = (
    SELECCIONAR atributo_id DE `eav_attribute`
    DONDE 'atributo_código` LIKE' estado '
) Y `catalog_product_entity_int`.value = 2
Amit Bera
fuente
5

Consulta Magento

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

Mysql Query

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
fuente
0

Por publicación de Amits: necesitaba encontrar esos elementos "deshabilitados" (valor de 2). Aquí hay una consulta mysql actual con algunos campos adicionales que utilicé para resolver los problemas que realmente necesitan ser "habilitados"

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
fuente
2
Fabian ... Gracias por el formateo. Mucho más fácil de usar para otros.
David G. Varela
0

La respuesta de @Amit Bera es la mejor, pero la solicitud SQL no funciona si tiene más de un código de atributo llamado "estado" (en mi caso, tengo un total de 5 líneas de "estado") y MySQL le devolverá: #1242 - Subquery returns more than 1 row error.

Así que completo la consulta SQL agregando el source_model como 'catalog / product_status' para que funcione:

SELECCIONE entidad_ID DE `catalog_product_entity_int`
DONDE atributo_id = (
   SELECCIONAR atributo_id DE `eav_attribute`
   DONDE 'atributo_código` LIKE' estado '
   Y `source_model` LIKE 'catalog / product_status'
) Y `catalog_product_entity_int`.value = 2
Klemart3D
fuente