大家好,我很难在Magento中添加联接,我知道我可以$collection->getSelect()->join
但我需要在其中添加Count()
表达式。
我正在努力实现的是这个问题:
SELECT `e`.*, COUNT(sfoi.product_id) as `count`
FROM `catalog_product_entity`
AS `e`
LEFT JOIN sales_flat_order_item sfoi
ON sfoi.product_id = e.entity_id
ORDER BY `e`.`entity_id` asc,
`e`.`entity_id` asc
编辑:
这就是它现在的样子:
$e = Mage::getModel('catalog/product')->getCollection()->getSelect();
$e->join(array('c' => 'sales_flat_order_item'),
'e.entity_id = c.product_id',
array('count' => 'COUNT(c.product_id)'));
输出此内容即可:
SELECT `e`.*, COUNT(c.product_id) AS `count` FROM `catalog_product_entity`
AS `e` INNER
JOIN `sales_flat_order_item` AS `c` ON e.entity_id = c.product_id
在我的收藏中执行此操作会导致adminhtml网格崩溃。 跟踪报告它崩溃了:
a:5:{i:0;s:35:"Unrecognized method 'setPageSize()'";i:1;s:4771:"#0 /app/code/core/Mage/Adminhtml/Block/Widget/Grid.php(504): Zend_Db_Select->__call('setPageSize', Array)
答案 0 :(得分:1)
您可以将任何Zend_Db_Select
方法应用于getSelect()
返回的对象。
http://framework.zend.com/manual/1.12/en/zend.db.select.html
您可以在COUNT()
方法中使用join()
,页面上有几个示例,特别是请参阅“添加GROUP BY子句”部分中的第一个示例:
->join(array('l' => 'line_items'),
'p.product_id = l.product_id',
array('line_items_per_product' => 'COUNT(*)'))