Das ist kein Tippfehler.
Mir ist bewusst, dass ich 'finset' verwenden muss, um meine Mehrfachauswahlattribute zu filtern. Ich versuche jedoch, mehrere Werte gleichzeitig zu filtern und Folgendes zu erhalten:
Incorrect parameter count in the call to native function 'FIND_IN_SET
.
Hier ist ein Beispielcode:
foreach ($options as $option) {
// $option[0] contains an attribute ID as a string
$attribute = Mage::getModel('catalog/resource_eav_attribute')->load($option[0]);
if ($attribute->getFrontendInput() == 'multiselect') {
$collection->addAttributeToFilter($attribute->getAttributeCode(), array('finset' => $option[1]));
} else {
$collection->addAttributeToFilter($attribute->getAttributeCode(), array('in' => $option[1]));
}
}
Was ich im Frontend habe, ist eine Reihe von Feldern, jede Menge entspricht einem bestimmten Attribut und enthält Kontrollkästchen für jeden Attributwert. Basierend auf diesen Einsendungen sollte die Sammlung herausfiltern, was ausgewählt wurde.
Alles funktioniert hervorragend, bis auf den Einzelfall, in dem ich versuche, zwei der Mehrfachauswahloptionen gleichzeitig zu filtern. Wenn ich nur einen davon auswähle, funktioniert die Suche ordnungsgemäß. Wenn ich zwei oder mehr auswähle, wird der oben erwähnte MySQL-Fehler angezeigt.
Irgendwelche Ideen? Oder bin ich gezwungen, benutzerdefinierte SQL-Anweisungen zu verwenden, um diesen Filter zu erstellen?
quelle
catalog_product_index_eav_idx
Tabelle zu filtern .Antworten:
Soweit ich weiß, möchten Sie 2 oder mehr Werte senden und nach diesen filtern
OR
.Etwas wie das:
$v1 & $v2
sind die Werte Ihrer KontrollkästchenDazu müssen Sie an das
addAttributeToFilter
Array und Array übergeben.Hier ist eine mögliche Implementierung.
quelle
Dieser Code kombiniert zwei
finset
Bedingungen mitOR
:quelle