Làm thế nào để liệt kê tất cả các sản phẩm khuyết tật với sql?


Câu trả lời:


25

Là sản phẩm magento theo cấu trúc EAV

Bạn cần viết Truy vấn giữa eav_attributecatalog_product_entity_intbảng

Magento lưu trạng thái sản phẩm trên bàn catalog_product_entity_intbảng. Lưu nó thành 1 và 2.

  • 1 cho phép
  • 2 để vô hiệu hóa.

Bạn cần lấy id thuộc tính trạng thái bằng mã thuộc tính status, về cơ bản là 96.

Truy vấn:

CHỌN entity_id TỪ `catalog_product_entity_int`
WHERE property_id = (
    CHỌN thuộc tính_id TỪ `eav_attribution`
    Ở đâu `property_code` THÍCH 'trạng thái'
) VÀ `catalog_product_entity_int`.value = 2

5

Truy vấn Magento

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

Truy vấn 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 - Tôi cần tìm những Mục "Vô hiệu hóa" (giá trị là 2). Dưới đây là một truy vấn mysql hiện tại với một vài trường bổ sung mà tôi đã sử dụng để xử lý các sản phẩm thực sự cần phải được "Kích hoạt"

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 ... Cảm ơn vì định dạng. Dễ dàng hơn nhiều cho người khác sử dụng.
David G. Varela

0

@Amit Bera trả lời là tốt nhất nhưng yêu cầu SQL không hoạt động nếu bạn có nhiều hơn một mã thuộc tính có tên là "trạng thái" (trong trường hợp của tôi, tôi có tổng cộng 5 dòng "trạng thái") và MySQL sẽ trả về cho bạn: #1242 - Subquery returns more than 1 rowlỗi.

Vì vậy, tôi hoàn thành truy vấn SQL bằng cách thêm source_model dưới dạng 'catalog / sản phẩm_status' như thế này để hoạt động:

CHỌN entity_id TỪ `catalog_product_entity_int`
WHERE property_id = (
   CHỌN thuộc tính_id TỪ `eav_attribution`
   Ở đâu `property_code` THÍCH 'trạng thái'
   VÀ `source_model` THÍCH 'catalog / sản phẩm_status'
) VÀ `catalog_product_entity_int`.value = 2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.