배열 키별로 제품 컬렉션 정렬
-
13-12-2019 - |
문제
이 메서드는 다음과 같은 메서드를 사용합니다.:
$skus = explode(",",$this->getRequest()->getParam('skus'));
$collection = Mage::getModel('catalog/product')->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('sku',array('in'=>$skus))
->addAttributeToFilter('visibility',array('gt'=>array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE)))
->addAttributeToFilter('status',array('eq'=> Mage_Catalog_Model_Product_Status::STATUS_ENABLED))
->addUrlRewrite()
;
이 컬렉션을 정렬하여 제품이$스쿠 어레이 안에 있는 스쿠 어레이와 동일한 순서로 표시되도록 하려면 어떻게 해야 합니까?
해결책
나는 비슷한 것을 사용하여 MySQL FIELD()
기능입니다.어쩌면 그것은 또한 당신을 도울 수 있습니다 여기에.
에 추가한 후 다른 필터를 수집,이 전화:
$collection->getSelect()->order(new Zend_Db_Expr('FIELD(sku, "' . implode('","', $skus) . '") DESC'));
다른 팁
다음을 사용하여 컬렉션을 만들 때 Mage::getModel('catalog/product')->getCollection()
또는 Mage::getResourceModel('catalog/product_collection')
주요 수집 테이블은 catalog_product_entity
.이 표에는 sku
이 열은 또한 인덱싱되므로 기본 테이블의 이 열을 기준으로 필터링 및 정렬하는 것이 가장 효율적입니다.이것은 당신에게 다음과 같은 것을 줄 것입니다:
$collection = Mage::getResourceModel('catalog/product_collection');
$collection
->addAttributeToSelect('*')
->addAttributeToFilter('visibility',array('gt'=>array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE)))
->addAttributeToFilter('status',array('eq'=> Mage_Catalog_Model_Product_Status::STATUS_ENABLED))
->addUrlRewrite();
$collection->getSelect()
->where('sku IN (?)', $skus)
->order('sku DESC');
당신은 당신이 이미 스쿠에 의해 필터링되는 컬렉션을 주문하기 위해 더 이상 아무것도 할 필요가 없습니다.
나는 또한 당신이 단지 추천하지 않을 것입니다 ->addAttributeToSelect('*')
,대신 필요한 속성 만 추가하십시오.제품 테이블의 도청 구조 때문에 추가된 각 속성은 데이터베이스 쿼리에 복잡성을 더하고 호출을 덜 효율적으로 만듭니다.
제휴하지 않습니다 magento.stackexchange