無効になっているすべての製品をSQLで一覧表示する方法は?


回答:


25

magento製品としてEAV構造を

テーブルとテーブルの間にクエリを書く必要がeav_attributeありcatalog_product_entity_intます

Magentoは、テーブルcatalog_product_entity_inttableに製品ステータスを保存します。1および2として保存します。

  • イネーブルの場合は1
  • 無効の場合は2。

属性コードを使用してステータス属性IDを取得する必要がありますstatus。基本的には96です。

クエリ:

`catalog_product_entity_int`からのentity_idの選択
WHERE attribute_id =(
    SELECT eattribute_id FROM `eav_attribute`
    WHERE `attribute_code` LIKE 'status'
)AND `catalog_product_entity_int`.value = 2

5

Magentoクエリ

$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

Per Amits Post-これらの「無効な」アイテム(値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));

2
ファビアン...フォーマットしてくれてありがとう。他の人にとってははるかに使いやすいです。
デビッドG.バレラ

0

@Amit Beraの回答が最適ですが、「status」という名前の属性コードが複数ある場合(私の場合、合計5行の「status」がある場合)、SQLリクエストは機能しません。MySQLは次の#1242 - Subquery returns more than 1 rowエラーを返します。

そこで、このようにsource_modelを 'catalog / product_status'として追加して、SQLクエリを完成させます。

`catalog_product_entity_int`からのentity_idの選択
WHERE attribute_id =(
   SELECT eattribute_id FROM `eav_attribute`
   WHERE `attribute_code` LIKE 'status'
   AND 'source_model` LIKE' catalog / product_status '
)AND `catalog_product_entity_int`.value = 2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.