Bagaimana cara mendaftar semua produk yang dinonaktifkan dengan sql?

Jawaban:

25

Sebagai produk magento mengikuti struktur EAV itu

Anda harus menulis kueri antara eav_attributedan catalog_product_entity_inttabel

Magento menyimpan status produk di atas catalog_product_entity_intmeja. Simpan sebagai 1 dan 2.

  • 1 untuk mengaktifkan
  • 2 untuk menonaktifkan.

Anda perlu mendapatkan id atribut status menggunakan kode atribut status, pada dasarnya itu adalah 96.

Pertanyaan:

SELECT entity_id DARI `catalog_product_entity_int`
WHERE atribut_id = (
    SELECT atribut_id DARI `eav_attribute`
    WHERE `attribute_code` SUKA 'status'
) DAN `catalog_product_entity_int`.value = 2
Amit Bera
sumber
5

Permintaan Magento

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

Permintaan 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')
Pradeep Sanku
sumber
0

Per Amits Post - Saya perlu menemukan Item "Nonaktif" (nilai 2). Berikut ini adalah permintaan mysql saat ini dengan beberapa bidang tambahan yang saya gunakan untuk pemecahan masalah produk mana yang sebenarnya perlu "Diaktifkan"

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));
David G. Varela
sumber
2
Fabian ... Terima kasih sudah memformat. Jauh lebih mudah digunakan orang lain.
David G. Varela
0

@Amit Bera jawab adalah yang terbaik tetapi permintaan SQL tidak berfungsi jika Anda memiliki lebih dari satu kode atribut bernama "status" (dalam kasus saya, saya memiliki total 5 baris "status") dan MySQL akan mengembalikan Anda: #1242 - Subquery returns more than 1 rowkesalahan.

Jadi saya menyelesaikan query SQL dengan menambahkan source_model sebagai 'katalog / product_status' seperti ini berfungsi:

SELECT entity_id DARI `catalog_product_entity_int`
WHERE atribut_id = (
   SELECT atribut_id DARI `eav_attribute`
   WHERE `attribute_code` SUKA 'status'
   DAN `source_model` SUKA 'katalog / product_status'
) DAN `catalog_product_entity_int`.value = 2
Klemart3D
sumber