วิธีแสดงรายการผลิตภัณฑ์ที่ถูกปิดใช้งานทั้งหมดด้วย sql


15

ฉันต้องการแสดงรายการผลิตภัณฑ์ที่ถูกปิดใช้งานทั้งหมดโดยใช้แบบสอบถาม MySQL

ฉันมีผลิตภัณฑ์มากเกินไปในฐานข้อมูลของฉันที่จะใช้สิ่งนี้ (สร้างคอลเลกชันโหลดและวนรอบ): http://www.srikanth.me/get-all-disabled-products-on-magento/

คำตอบ:


25

ในฐานะที่เป็นผลิตภัณฑ์วีโอไอพี folow โครงสร้าง EAV ที่

คุณต้องเขียนแบบสอบถามระหว่างeav_attributeและcatalog_product_entity_intตาราง

วีโอไอพีบันทึกสถานะผลิตภัณฑ์บนcatalog_product_entity_intโต๊ะ บันทึกเป็น 1 และ 2

  • 1 เพื่อเปิดใช้งาน
  • 2 สำหรับปิดการใช้งาน

คุณต้องได้รับรหัสคุณลักษณะสถานะโดยใช้รหัสคุณลักษณะstatusโดยทั่วไปมันคือ 96

ค้นหา:

เลือก entity_id จาก "catalog_product_entity_int"
WHERE attribute_id = (
    SELECT attribute_id จาก `eav_attribute`
    WHERE` attribute_code` LIKE 'สถานะ'
) และ `catalog_product_entity_int`.value = 2

5

Magento Query

$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

โพสต์ต่อ Amits - ฉันต้องการค้นหารายการ "ปิดการใช้งาน" (ค่า 2) นี่คือแบบสอบถาม mysql ปัจจุบันที่มีเขตข้อมูลเพิ่มเติมไม่กี่แห่งที่ฉันใช้ในการแก้ไขปัญหาว่าผลิตภัณฑ์ใดต้องเป็น "Enabled"

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 เป็นคำตอบที่ดีที่สุด แต่คำขอ SQL ไม่ทำงานหากคุณมีรหัสแอตทริบิวต์มากกว่าหนึ่งชื่อ "สถานะ" (ในกรณีของฉันฉันมี "สถานะ" ทั้งหมด 5 บรรทัด) และ MySQL จะส่งคืนคุณ: #1242 - Subquery returns more than 1 rowข้อผิดพลาด

ดังนั้นฉันกรอกแบบสอบถาม SQL โดยเพิ่ม source_model เป็น 'catalog / product_status' เช่นนี้ทำงาน:

เลือก entity_id จาก "catalog_product_entity_int"
WHERE attribute_id = (
   SELECT attribute_id จาก `eav_attribute`
   WHERE` attribute_code` LIKE 'สถานะ'
   และ `source_model` LIKE 'catalog / product_status'
) และ `catalog_product_entity_int`.value = 2
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.