MySQL 쿼리를 사용하여 모든 비활성화 된 제품을 나열해야합니다.
데이터베이스에 다음과 같은 것을 사용하기에 너무 많은 제품이 있습니다 (컬렉션 생성,로드 및 반복) : http://www.srikanth.me/get-all-disabled-products-on-magento/
MySQL 쿼리를 사용하여 모든 비활성화 된 제품을 나열해야합니다.
데이터베이스에 다음과 같은 것을 사용하기에 너무 많은 제품이 있습니다 (컬렉션 생성,로드 및 반복) : http://www.srikanth.me/get-all-disabled-products-on-magento/
답변:
마 젠토 제품으로서 EAV 구조는 다음과 같습니다.
와 테이블 사이 에 쿼리 를 작성해야 합니다.eav_attribute
catalog_product_entity_int
마 젠토는 제품 상태를 테이블 catalog_product_entity_int
테이블 에 저장 합니다. 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
마 젠토 쿼리
$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')
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));
@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