Jak wyświetlić listę wszystkich niepełnosprawnych produktów z SQL?

Odpowiedzi:

25

Jako produkt Magento postępuj zgodnie ze strukturą EAV

Musisz napisać zapytanie między eav_attributei catalog_product_entity_inttabelą

Magento zapisz status produktu na catalog_product_entity_intstole. Zapisz jako 1 i 2.

  • 1 dla włączenia
  • 2 dla wyłączenia.

Musisz uzyskać identyfikator atrybutu statusu za pomocą kodu atrybutu status, w zasadzie jest to 96.

Pytanie:

WYBIERZ identyfikator_od podmiotu `katalog_produktu_produktu`
GDZIE identyfikator_atrybutu = (
    WYBIERZ identyfikator_atrybutu Z `atrybut_waw_`
    GDZIE status `kod_atrybutu` LIKE '
) ORAZ `katalog_produktu_intity_int`. Wartość = 2
Amit Bera
źródło
5

Kwerenda Magento

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

Zapytanie 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
źródło
0

Post Amits Post - Musiałem znaleźć te „Wyłączone” przedmioty (wartość 2). Oto bieżące zapytanie mysql z kilkoma dodatkowymi polami, z których korzystałem podczas rozwiązywania problemów z tym, które produkty muszą być „włączone”

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
źródło
2
Fabian ... Dzięki za formatowanie. Znacznie łatwiejszy w użyciu dla innych.
David G. Varela,
0

Odpowiedź @Amit Bera jest najlepsza, ale zapytanie SQL nie działa, jeśli masz więcej niż jeden kod atrybutu o nazwie „status” (w moim przypadku mam w sumie 5 wierszy „status”), a MySQL zwróci ci: #1242 - Subquery returns more than 1 rowbłąd.

Wypełniam więc zapytanie SQL, dodając model_źródłowy jako „katalog / status_produktu” w następujący sposób:

WYBIERZ identyfikator_od podmiotu `katalog_produktu_produktu`
GDZIE identyfikator_atrybutu = (
   WYBIERZ identyfikator_atrybutu Z `atrybut_waw_`
   GDZIE status `kod_atrybutu` LIKE '
   ORAZ `source_model` LIKE 'katalog / product_status'
) ORAZ `katalog_produktu_intity_int`. Wartość = 2
Klemart3D
źródło