Koleksi dengan FIND_IN_SET pada atribut multiselect, tetapi beberapa hanya memiliki satu nilai

9

Saya sedang membangun koleksi produk, yang akan menemukan hasil dari atribut multiselect.

(kode yang relevan yang menambahkan finset ke koleksi - disesuaikan untuk menampilkan nilai id nyata)

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

Sql yang dihasilkan (dengan filter visiblity ditambahkan) adalah sebagai berikut:

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

Masalahnya adalah saya mendapatkan kesalahan sql:

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

dan saya (berpikir) Saya dapat melihat alasannya: Beberapa nilai multiseleksi hanya memiliki satu opsi, sehingga tidak ada nilai yang dipisahkan koma untuk memenuhi syarat untuk FINSET

Apakah saya benar mengapa kesalahan ini terjadi? Bagaimana saya bisa menulis objek koleksi ini untuk memperhitungkan ini?

Jika tidak di atas, apa yang saya lewatkan?

Hasil dari menjalankan sql di mysql workbench, minus klausa find_in_set:

hasil diperiksa di editor kueri

ProxiBlue
sumber

Jawaban:

26

Coba gunakan addAttributeToFilter dengan atau ketentuan

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

Atau

$collection->addAttributeToFilter(
    array(
        array('attribute'=> 'attributecode','finset' => array('237')),
        array('attribute'=> 'attributecode','finset' => array('237')),
        array('attribute'=> 'attributecode','finset' => array('237')),
    )
);
oleksii.svarychevskyi
sumber
1
Bagaimana kami TIDAK BISA FIND_IN_SET?
Slimshadddyyy
Cara menggunakan kondisi 'AND'
Deeban Babu
1
Untuk "DAN", cukup ulangi $ collection-> addAttributeToFilter () untuk setiap nilai
Wouter