다중 선택 속성에 FIND_IN_SET이있는 컬렉션이지만 일부 값은 하나만 있습니다


9

다중 선택 속성의 결과를 찾을 수있는 제품 컬렉션을 작성 중입니다.

(집합에 핀셋을 추가하는 관련 코드-실제 ID 값을 표시하도록 조정 됨)

$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', 'measurement');
    $value = array('finset' => array('237',
                '236',
                '235',
                '234',
                '233',));
    $collection->addAttributeToFilter($attribute, $value);

결과 SQL (가시성 필터가 추가 된)은 다음과 같습니다.

SELECT DISTINCT
    e . *,
    at_measurement.value AS measurement,
    at_visibility.value AS visibility
FROM
    catalog_product_entity AS e
        INNER JOIN
    catalog_product_entity_varchar AS at_measurement ON (at_measurement.entity_id = e.entity_id) AND (at_measurement.attribute_id = '983') AND (at_measurement.store_id = 0)
        INNER JOIN
    catalog_product_entity_int AS at_visibility ON (at_visibility.entity_id = e.entity_id) AND (at_visibility.attribute_id = '526') AND (at_visibility.store_id = 0)
WHERE
    (e.attribute_set_id IN ('74')) AND (FIND_IN_SET('237',
            '236',
            '235',
            '234',
            '233',
            at_measurement.value)) AND (at_visibility.value IN ('2' , '4'))
GROUP BY e.entity_id

문제는 SQL 오류가 발생한다는 것입니다.

"SQLSTATE[42000]: Syntax error or access violation: 1582 Incorrect parameter count in the call to native function 'FIND_IN_SET'"

그리고 나는 (생각) 이유를 알 수 있습니다 : 일부 다중 선택 값에는 하나의 옵션 만 있으므로 FINSET에 적합하도록 쉼표로 구분 된 값은 없습니다

이 오류가 발생하는 이유가 맞습니까? 이 컬렉션 개체를 어떻게 작성하여이를 설명 할 수 있습니까?

위의 것이 아니라면 무엇을 놓치고 있습니까?

find_in_set 절을 빼고 mysql workbench에서 SQL을 실행 한 결과 :

쿼리 편집기에서 결과 확인


답변:


26

또는 조건과 함께 addAttributeToFilter를 사용하십시오.

$collection->addAttributeToFilter($attribute,
    array(
        array('finset'=> array('237')),
        array('finset'=> array('238')),
        array('finset'=> array('239')),
    )
);

또는

$collection->addAttributeToFilter(
    array(
        array('attribute'=> 'attributecode','finset' => array('237')),
        array('attribute'=> 'attributecode','finset' => array('237')),
        array('attribute'=> 'attributecode','finset' => array('237')),
    )
);

1
우리는 어떻게 FIND_IN_SET을 할 수 없습니까?
Slimshadddyyy

'AND'조건을 사용하는 방법
Deeban Babu

1
"AND"의 경우 각 값에 대해 $ collection-> addAttributeToFilter ()를 반복하십시오
Wouter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.