Я использую OpenCart, и я сделал несколько фильтров в списке продуктов, где администратор может выбрать атрибуты продукта и отфильтровать продукты.
Сейчас я выбираю например. Ватт = 11 и Вольт = 240, это показывает 5 продуктов, которые имеют 11 ватт и 5 продуктов, которые имеют 240 вольт, 10 продуктов.
НО я хочу показывать только те продукты, которые имеют ОБА 11 Вт и 240 вольт.
Атрибуты в var_dump следующие:
array(3) { [0]=> array(2) { ["attribute_id"]=> string(2) "17" ["values"]=> string(4) "[11]" } [1]=> array(2) { ["attribute_id"]=> string(2) "18" ["values"]=> string(6) "[240]" }
Это код, который я использую
Соединение
if(!empty($data['filter_product_attributes'])) {
$sql .= " LEFT JOIN " . DB_PREFIX . "product_attribute pa ON (p.product_id = pa.product_id)";
}
Я добавляю все атрибуты в строку $ attribute_ids для разделения идентификаторов и в attribute_texts для разделения текстов и снизу используйте AND … IN
$sql .= " AND pa.attribute_id IN (".$attribute_ids.")";
$sql .= " AND pa.text IN (".$attribute_texts.")";
Я пробовал предложение HAVING ($ ids и $ texst являются массивами), но оно не работает должным образом:
$sql .= " HAVING";
$idc = 0;
foreach($ids as $id) {
if($idc == 0) {
$sql .= " sum(pa.attribute_id = ". $id .") > 0";
}
else {
$sql .= " and sum(pa.attribute_id = ". $id .") > 0 ";
}
$idc +=1;
}
$txc = 0;
foreach($texts as $text) {
$sql .= " and sum(pa.text = ". $text .") > 0";
}
}
Как я могу показать продукты, у которых выбраны ВСЕ атрибуты? Есть идеи?
Задача ещё не решена.
Других решений пока нет …