Ich baue eine Produktkollektion auf, die Ergebnisse aus einem Mehrfachauswahlattribut findet.
(relevanter Code, der der Sammlung einen Finset hinzufügt - angepasst, um echte ID-Werte anzuzeigen)
$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 hinzugefügtem Sichtbarkeitsfilter) ist wie folgt:
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 erhalte:
"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 verstehen warum: Einige der Multiselect-Werte haben nur eine Option, daher gibt es keine durch Kommas getrennten Werte, um sich für FINSET zu qualifizieren
Stimmt es, warum dieser Fehler auftritt? Wie kann ich dieses Sammlungsobjekt schreiben, um dies zu berücksichtigen?
Wenn nicht, was fehlt mir?
Die Ergebnisse der Ausführung von SQL in der MySQL-Workbench abzüglich der Klausel find_in_set: