Tüm engelli ürünleri sql ile nasıl listeleyebilirim?


Yanıtlar:


25

Magento ürünü olarak EAV yapısını

Ve table arasında bir Sorgu yazmanız gerekiyoreav_attributecatalog_product_entity_int

Magento ürün durumunu tablo catalog_product_entity_inttablosuna kaydedin . 1 ve 2 olarak kaydedin.

  • Etkinleştirmek için 1
  • 2 devre dışı bırakmak için.

Özellik kodu kullanarak status özellik kimliği almanız gerekir status, temel olarak 96'dır.

Sorgu:

Varlık_kimliği `catalog_product_entity_int`
NEREDE attribute_id = (
    "Eav_attribute" dan SEÇİN öznitelik_kimliği
    NEREDE `attribute_code` LIKE 'durumu'
) AND `catalog_product_entity_int`.value = 2

5

Magento Sorgusu

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

MySQL Sorgusu

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

Değişiklik Sonrası - Bu "Engelli" Öğeleri (2 değeri) bulmam gerekiyordu. İşte hangi ürünleri aslında "Etkin" olması gereken ateş sorun için kullanılan birkaç ekstra alana sahip geçerli bir mysql sorgusu

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 ... Biçimlendirdiğiniz için teşekkürler. Başkalarının kullanması çok daha kolay.
David G. Varela

0

@Amit Bera yanıtı en iyisidir, ancak "status" adında birden fazla öznitelik kodunuz varsa (benim durumumda toplam 5 "durum" satırına sahibim) varsa SQL isteği işe yaramaz ve MySQL size şunu döndürür: #1242 - Subquery returns more than 1 rowhata.

Bu yüzden kaynak_model 'katalog / product_status' gibi çalışmak için ekleyerek SQL sorgusunu tamamlamak:

Varlık_kimliği `catalog_product_entity_int`
NEREDE attribute_id = (
   "Eav_attribute" dan SEÇİN öznitelik_kimliği
   NEREDE `attribute_code` LIKE 'durumu'
   VE `` source_model`` GİBİ '' katalog / product_status '
) AND `catalog_product_entity_int`.value = 2
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.