我正在尝试在Magento中获取未分类产品列表。这不一定是Magento的问题,而是一般的SQL问题。我有一个product
表和一个category
表,其中有一个名为category_product
的关系表。每个产品都出现在两个默认类别(2和5)中。我如何构建一个查询(我可以将其转换为Magento查询),该查询返回除2和5之外没有任何类别的所有产品?
谢谢!
答案 0 :(得分:1)
尝试:
select p.product_id, p.name
from category_product cp
join product p on cp.product_id = p.product_id
group by cp.product_id
having sum(case when category_id in (2,5) then 0 else 1 end) = 0
答案 1 :(得分:1)
对于那些对如何在Magento中为Adminhtml网格执行此操作感兴趣的人,这里是_prepareCollection
函数(在1.6.1.0中测试)。我在关于第2类和第5类的问题中所写的内容最终成了一场疯狂的追逐。
protected function _prepareCollection()
{
$collection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('name')
->addAttributeToSelect('status') /* so i can filter by enabled/disabled */
->joinField( 'category_product'
, 'catalog_category_product'
, 'category_id'
, 'product_id = entity_id'
, null
, 'left'
)
;
/*ideally this should be an 'addFieldToFilter' but it doesn't work. Oh well.*/
$collection->getSelect()
->where('at_category_product.category_id IS NULL')
;
$this->setCollection($collection);
return parent::_prepareCollection();
}
答案 2 :(得分:0)
不确定这是最有效的,但它应该有用......
SELECT * from product p
INNER JOIN category_product cp on p.id = cp.product_id
WHERE cp.category_id IN (2, 5) AND cp.category_id NOT IN (SELECT category_id FROM category_product WHERE category_id NOT IN (2,5))
答案 3 :(得分:0)
尝试以下查询
select product.name
from product inner join category_product
on product.id = category_product.product
having count (*) < 2
我假设唯一的类别确实是2和5。