문제

이 메서드는 다음과 같은 메서드를 사용합니다.:

    $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('*'),대신 필요한 속성 만 추가하십시오.제품 테이블의 도청 구조 때문에 추가된 각 속성은 데이터베이스 쿼리에 복잡성을 더하고 호출을 덜 효율적으로 만듭니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 magento.stackexchange
scroll top