Çoklu seçim özelliklerinde FIND_IN_SET içeren koleksiyon, ancak bazılarının yalnızca bir değeri var


9

Çoktan seçmeli bir özellikten sonuçlar bulabilecek bir ürün koleksiyonu oluşturuyorum.

(koleksiyona finset ekleyen ilgili kod - gerçek kimlik değerlerini görüntüleyecek şekilde ayarlanır)

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

Ortaya çıkan sql (görünürlük filtresi eklenmiş olarak) aşağıdaki gibidir:

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

Sorun şu ki bir sql hatası alıyorum:

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

ve ben (düşünüyorum) nedenini görebiliyorum: Çoklu seçim değerlerinin sadece bir seçeneği vardır, bu nedenle FINSET için uygun virgülle ayrılmış değerler yoktur

Bu hatanın neden oluştuğu konusunda doğru muyum? Bunu hesaba katmak için bu toplama nesnesini nasıl yazabilirim?

Yukarıdaki değilse, ne eksik?

Mysql tezgahında sql çalıştırmanın sonuçları, find_in_set yantümcesi eksi:

sonuçlar sorgu düzenleyicisinde kontrol edildi


Yanıtlar:


26

AddAttributeToFilter ile veya koşulunu kullanmayı deneyin

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

Veya

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

1
Nasıl FIND_IN_SET DEĞİL yapabiliriz?
Slimshadddyyy

'AND' koşulu nasıl kullanılır
Deeban Babu

1
"AND" için, her bir değer için $ collection-> addAttributeToFilter () yöntemini tekrarlayın
Wouter
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.