通過OSdave註釋是開始尋找問題答案的好地方。
在它的心中,Magento在訪問數據庫時使用Zend_Db。因此,您可以使用'magic'__toString() method of Zend_Db_Select來輸出您的PHP代碼生成的底層MySQL查詢。作爲類別過濾是針對你的情況我已經適應原密碼咯:
$productCount = 5;
$storeId = Mage::app()->getStore()->getId();
$productsBestSellerMens = Mage::getResourceModel('reports/product_collection')
->addOrderedQty()
->addAttributeToSelect('*')
->setStoreId($storeId)
->setPageSize($productCount);
var_dump((string) $productsBestSellerMens->getSelect());
exit;
這是原油,但找到的非常簡單的方法所產生的SQL查詢:
SELECT
SUM(order_items.qty_ordered) AS `ordered_qty`,
`order_items`.`name` AS `order_items_name`,
`order_items`.`product_id` AS `entity_id`,
`e`.`entity_type_id`,
`e`.`attribute_set_id`,
`e`.`type_id`,
`e`.`sku`,
`e`.`has_options`,
`e`.`required_options`,
`e`.`created_at`,
`e`.`updated_at`
FROM `sales_flat_order_item` AS `order_items`
INNER JOIN `sales_flat_order` AS `order` ON `order`.entity_id = order_items.order_id AND `order`.state <> 'canceled'
LEFT JOIN `catalog_product_entity` AS `e` ON (e.type_id NOT IN ('grouped', 'configurable', 'bundle')) AND e.entity_id = order_items.product_id AND e.entity_type_id = 4
WHERE (parent_item_id IS NULL)
GROUP BY `order_items`.`product_id`
HAVING (SUM(order_items.qty_ordered) > 0)
正如你從查看查詢中可以看出,沒有任何過濾器「售罄」產品。
您可以使用Mage_Catalog_Model_Product
類的isSaleable()
方法處理「售罄」產品的顯示。 Magento模板文件/app/design/frontend/base/default/template/catalog/product/view.phtml
中顯示了一個實際的例子。
還值得注意的是,當我試圖用相同的方法拉回暢銷品清單時,我發現結果與審覈的銷售數據不匹配。我們的blog提供了一個更完善的調查和更正的方法來檢索macth auditedsales數據的暢銷書。
在原生Magento 1.7中,這個查詢沒有考慮可用性,你可以通過添加Mage :: log($ productsBestSellerMens-> getSelect() - > assemble(),null,'productsBestSellerMens來檢查。 log',TRUE);'查詢後,運行並打開文件YOUR_MAGENTO_ROOT/var/log/productsBestSellerMens.log。它確實排除了捆綁/可配置/分組,但也許這是你的問題? – OSdave