ฉันต้องการแสดงรายการผลิตภัณฑ์ที่ถูกปิดใช้งานทั้งหมดโดยใช้แบบสอบถาม MySQL
ฉันมีผลิตภัณฑ์มากเกินไปในฐานข้อมูลของฉันที่จะใช้สิ่งนี้ (สร้างคอลเลกชันโหลดและวนรอบ): http://www.srikanth.me/get-all-disabled-products-on-magento/
ฉันต้องการแสดงรายการผลิตภัณฑ์ที่ถูกปิดใช้งานทั้งหมดโดยใช้แบบสอบถาม MySQL
ฉันมีผลิตภัณฑ์มากเกินไปในฐานข้อมูลของฉันที่จะใช้สิ่งนี้ (สร้างคอลเลกชันโหลดและวนรอบ): http://www.srikanth.me/get-all-disabled-products-on-magento/
คำตอบ:
ในฐานะที่เป็นผลิตภัณฑ์วีโอไอพี folow โครงสร้าง EAV ที่
คุณต้องเขียนแบบสอบถามระหว่างeav_attribute
และcatalog_product_entity_int
ตาราง
วีโอไอพีบันทึกสถานะผลิตภัณฑ์บนcatalog_product_entity_int
โต๊ะ บันทึกเป็น 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
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')
โพสต์ต่อ 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));
@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