मल्टीसेप्ट विशेषताओं पर FIND_IN_SET के साथ संग्रह, लेकिन कुछ का केवल एक मूल्य है


9

मैं एक उत्पाद संग्रह का निर्माण कर रहा हूं, जो एक गुणन विशेषता से परिणाम प्राप्त करेगा।

(प्रासंगिक कोड जो संग्रह में फ़ाइनसेट जोड़ता है - वास्तविक आईडी मान प्रदर्शित करने के लिए समायोजित)

$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'"

और (मुझे लगता है) मैं देख सकता हूं कि क्यों: कुछ बहु-मूल्य मूल्यों में केवल एक ही विकल्प है, इस प्रकार फिन्स के लिए अर्हता प्राप्त करने के लिए कोई अल्पविराम से अलग किए गए मान नहीं हैं।

क्या मैं सही हूं कि यह त्रुटि क्यों उत्पन्न हुई? मैं इस संग्रह की वस्तु को इसके लिए कैसे लिख सकता हूं?

यदि उपरोक्त नहीं है, तो मुझे क्या याद आ रहा है?

Mysql कार्यक्षेत्र में sql चलाने से परिणाम, find_in_set क्लाज को घटाता है:

क्वेरी संपादक में चेक किए गए परिणाम


जवाबों:


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 कैसे नहीं कर सकते?
स्लीमशेड्डीय 12


1
"और" के लिए, बस $ संग्रह को दोहराएं-> addAttributeToFilter () प्रत्येक मान के लिए
Wouter
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.