Bộ sưu tập với FIND_IN_SET trên nhiều thuộc tính, nhưng một số chỉ có một giá trị


9

Tôi đang xây dựng một bộ sưu tập sản phẩm, sẽ tìm thấy kết quả từ một thuộc tính multiselect.

(mã có liên quan thêm finset vào bộ sưu tập - được điều chỉnh để hiển thị giá trị id thực)

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

Kết quả sql (với bộ lọc độ nhớt được thêm vào) là như sau:

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

Vấn đề là tôi nhận được một lỗi sql:

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

và tôi (nghĩ) Tôi có thể thấy tại sao: Một số giá trị đa lựa chọn chỉ có một tùy chọn, do đó không có giá trị được phân tách bằng dấu phẩy để đủ điều kiện cho FINSET

Tôi có đúng tại sao lỗi này được tạo ra không? Làm thế nào tôi có thể viết đối tượng bộ sưu tập này để giải thích cho điều này?

Nếu không phải ở trên, tôi còn thiếu gì?

Các kết quả từ việc chạy sql trong bàn làm việc mysql, trừ mệnh đề find_in_set:

kết quả được kiểm tra trong trình soạn thảo truy vấn


Câu trả lời:


25

Hãy thử sử dụng addAttributionToFilter với hoặc điều kiện

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

Hoặc là

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

1
Làm thế nào chúng ta KHÔNG THỂ TÌM KIẾM?
Slimshadddyyy

Cách sử dụng điều kiện 'VÀ'
Deeban Babu

1
Đối với "VÀ", chỉ cần lặp lại bộ sưu tập $-> addAttributionToFilter () cho mỗi giá trị
Wouter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.