MySQLクエリを使用して、無効になっているすべての製品を一覧表示する必要があります。
データベースにあまりにも多くの製品があり、次のようなものを使用するには(コレクションの作成、ロード、ループ処理):http : //www.srikanth.me/get-all-disabled-products-on-magento/
MySQLクエリを使用して、無効になっているすべての製品を一覧表示する必要があります。
データベースにあまりにも多くの製品があり、次のようなものを使用するには(コレクションの作成、ロード、ループ処理):http : //www.srikanth.me/get-all-disabled-products-on-magento/
回答:
magento製品としてEAV構造を
テーブルとテーブルの間にクエリを書く必要がeav_attribute
ありcatalog_product_entity_int
ます
Magentoは、テーブルcatalog_product_entity_int
tableに製品ステータスを保存します。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
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')
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));
@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