SQL로 비활성화 된 모든 제품을 나열하는 방법은 무엇입니까?


답변:


25

마 젠토 제품으로서 EAV 구조는 다음과 같습니다.

와 테이블 사이 에 쿼리 를 작성해야 합니다.eav_attributecatalog_product_entity_int

마 젠토는 제품 상태를 테이블 catalog_product_entity_int테이블 에 저장 합니다. 1과 2로 저장하십시오.

  • 활성화하려면 1
  • 비활성화하려면 2입니다.

속성 코드를 사용하여 상태 속성 ID를 가져와야 status하며 기본적으로 96입니다.

질문:

`catalog_product_entity_int`에서 entity_id를 선택하십시오.
어디 attribute_id = (
    `eav_attribute`에서 attribute_id를 선택하십시오.
    `attribute_code`와 같은 'status'
) AND`catalog_product_entity_int`.value = 2

5

마 젠토 쿼리

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

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-해당 "Disabled"항목 (값 2)을 찾아야했습니다. 다음은 몇 가지 추가 필드가있는 현재 mysql 쿼리입니다. 실제로 어떤 제품을 "활성화"해야하는지 문제를 해결하는 데 사용했습니다.

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
파비안 .. 포맷 해줘서 고마워. 다른 사람들이 사용하기 훨씬 쉽습니다.
David G. Varela

0

@Amit Bera 답변이 가장 좋지만 "status"라는 속성 코드가 두 개 이상인 경우 (내 경우에는 총 5 줄의 "status"가 있음) MySQL에서 #1242 - Subquery returns more than 1 row오류를 반환하면 SQL 요청이 작동하지 않습니다 .

그래서 source_model을 'catalog / product_status'로 다음과 같이 추가하여 SQL 쿼리를 완료합니다.

`catalog_product_entity_int`에서 entity_id를 선택하십시오.
어디 attribute_id = (
   `eav_attribute`에서 attribute_id를 선택하십시오.
   `attribute_code`와 같은 'status'
   그리고 'catalog / product_status'와 같은 'source_model'
) AND`catalog_product_entity_int`.value = 2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.