Come elencare tutti i prodotti disabilitati con sql?


Risposte:


25

Come prodotto magento segue la struttura EAV

Devi scrivere una query tra eav_attributee catalog_product_entity_inttable

Magento salva lo stato del prodotto sul tavolo catalog_product_entity_int tavolo. Salva come 1 e 2.

  • 1 per abilitare
  • 2 per disabilitare.

È necessario ottenere l'id dell'attributo di stato utilizzando il codice dell'attributo status , in pratica è 96.

Query:

SELEZIONA entity_id FROM `catalog_product_entity_int`
DOVE attributo_id = (
    SELEZIONA attributo_ID DA `eav_attribute`
    DOVE lo stato `attributo_codice` COME '
) AND `catalog_product_entity_int`.value = 2

5

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

0

Per Amits Post - Avevo bisogno di trovare quegli articoli "disabilitati" (valore di 2). Ecco una query mysql attuale con alcuni campi extra che ho usato per risolvere i problemi di quali prodotti devono effettivamente essere "Abilitati"

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 ... Grazie per la formattazione. Molto più facile da usare per gli altri.
David G. Varela,

0

@Amit Bera la risposta è la migliore, ma la richiesta SQL non funziona se hai più di un codice di attributo chiamato "status" (nel mio caso ho un totale di 5 righe di "status") e MySQL ti restituirà: #1242 - Subquery returns more than 1 row errore.

Quindi completo la query SQL aggiungendo source_model come 'catalog / product_status' in questo modo per funzionare:

SELEZIONA entity_id FROM `catalog_product_entity_int`
DOVE attributo_id = (
   SELEZIONA attributo_ID DA `eav_attribute`
   DOVE lo stato `attributo_codice` COME '
   E catalogo `source_model` LIKE '/ product_status'
) AND `catalog_product_entity_int`.value = 2
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.