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

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')

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));

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.