Frage

Ich baue eine Produktsammlung auf, die Ergebnisse aus einem Multiselect -Attribut finden.

(Relevanter Code, der Finset zur Sammlung hinzufügt - angepasst an reale ID -Werte angepasst)

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

Das resultierende SQL (mit dem zugefügten Fliegenfilter) ist als solches:

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

Das Problem ist, dass ich einen SQL -Fehler bekomme:

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

Und ich (denke), ich kann sehen, warum: Einige der Multiselect -Werte haben nur eine Option, daher gibt es keine von Kommas getrennten Werten, um sich für Finset zu qualifizieren

Bin ich richtig, warum dieser Fehler erzeugt wird? Wie kann ich dieses Sammelobjekt schreiben, um dies zu berücksichtigen?

Wenn nicht die oben genannten, was fehlt mir?

Die Ergebnisse aus dem Ausführen der SQL in MySQL Workbench, abzüglich der Klausel find_in_set:

results checked in query editor

War es hilfreich?

Lösung

Versuchen Sie, AddatTribUtoFilter mit oder Bedingung zu verwenden

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

Oder

$collection->addAttributeToFilter(
    array(
        array('attribute'=> 'attributecode','finset' => array('237')),
        array('attribute'=> 'attributecode','finset' => array('237')),
        array('attribute'=> 'attributecode','finset' => array('237')),
    )
);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top