Comment lister tous les produits désactivés avec sql?

Réponses:

25

En tant que produit magento, suivez la structure EAV qui

Vous devez écrire une requête entre eav_attributeet catalog_product_entity_inttable

Magento enregistre le statut du produit sur la table de la catalog_product_entity_inttable. Enregistrez-le sous 1 et 2.

  • 1 pour activer
  • 2 pour désactiver.

Vous devez obtenir l'ID d'attribut de statut à l'aide du code d'attribut status, il s'agit essentiellement de 96.

Requete:

SELECT entity_id FROM `catalog_product_entity_int`
WHERE attribute_id = (
    SELECT attribute_id FROM `eav_attribute`
    OERE l'état `attribute_code` LIKE ''
) ET `catalog_product_entity_int`.value = 2
Amit Bera
la source
5

Requête Magento

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

Requête 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
la source
0

Per Amits Post - J'avais besoin de trouver ces articles "désactivés" (valeur de 2). Voici une requête mysql actuelle avec quelques champs supplémentaires que j'ai utilisés pour identifier les produits qui doivent être "activés"

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
la source
2
Fabian ... Merci pour la mise en forme. Beaucoup plus facile à utiliser pour les autres.
David G. Varela
0

La réponse @Amit Bera est la meilleure mais la requête SQL ne fonctionne pas si vous avez plus d'un code attribut nommé "status" (dans mon cas j'ai au total 5 lignes de "status") et MySQL vous retournera: #1242 - Subquery returns more than 1 row erreur.

Je termine donc la requête SQL en ajoutant le source_model en tant que «catalogue / product_status» comme ceci fonctionne:

SELECT entity_id FROM `catalog_product_entity_int`
WHERE attribute_id = (
   SELECT attribute_id FROM `eav_attribute`
   OERE l'état `attribute_code` LIKE ''
   ET `source_model` LIKE 'catalogue / product_status'
) ET `catalog_product_entity_int`.value = 2
Klemart3D
la source