Неправильная логика работы по Фильтру Характеристики ФлажекНесколько Работает как ИЛИ а нужно как И.
У меня во флажек несколько интерфейсы монитора:
DVI
HDMI
VGA
Я хочу отобрать все мониторы с интерфейсом
DVI+HDMI
да + да
А в итоге получаю все мониторы любой комбнацией вхождния этих интерфейсов
DVI+HDMI
да + да
да + нет
нет + да
Нужна отдельная группировка и AND по каждому значению характеристики, както так:
AND (var_val_499.variant_id IN (6814, 6811)) -> AND (var_val_499_6814 is not null AND var_val_499_6811 is not null ))
SELECT SQL_CALC_FOUND_ROWS products.product_id, IF(shared_descr.product_id IS NOT NULL, shared_descr.product, descr1.product) as product, cscart_supplier_links.supplier_id FROM cscart_products as products LEFT JOIN cscart_product_features_values as var_val_499 ON var_val_499.product_id = products.product_id AND var_val_499.lang_code = 'ru' AND var_val_499.feature_id = 499 LEFT JOIN cscart_product_descriptions as descr1 ON descr1.product_id = products.product_id AND descr1.lang_code = 'ru' LEFT JOIN cscart_product_prices as prices ON prices.product_id = products.product_id AND prices.lower_limit = 1 INNER JOIN cscart_products_categories as products_categories ON products_categories.product_id = products.product_id INNER JOIN cscart_categories ON cscart_categories.category_id = products_categories.category_id AND (cscart_categories.usergroup_ids = '' OR FIND_IN_SET(0, cscart_categories.usergroup_ids) OR FIND_IN_SET(1, cscart_categories.usergroup_ids)) AND cscart_categories.status IN ('A', 'H') LEFT JOIN cscart_ult_product_descriptions shared_descr ON shared_descr.product_id = products.product_id AND shared_descr.company_id = 1 AND shared_descr.lang_code = 'ru' LEFT JOIN cscart_supplier_links ON cscart_supplier_links.object_id = products.product_id AND cscart_supplier_links.object_type = 'P' WHERE 1 AND (var_val_499.variant_id IN (6814, 6811)) AND cscart_categories.category_id IN (7337) AND cscart_categories.company_id = 1 AND (products.usergroup_ids = '' OR FIND_IN_SET(0, products.usergroup_ids) OR FIND_IN_SET(1, products.usergroup_ids)) AND products.status IN ('A') AND prices.usergroup_id IN (0, 0, 1) GROUP BY products.product_id ORDER BY NULL asc LIMIT 0, 12
p.s. Пытался разобраться в вашей fn.catalog.php это жжесть в плане фильтра :)
Там есть фильтры "Поддерживаемые цифровые стандарты" или любой другой, они работают также.
Я примерно понимаю, что вам требуется, скорее всего логика данного типа характеристики и фильтра вам не подходит. Существующий фильтр ищет все варианты, а не строгое попадание.
Иначе, по вашей логике, не один телевизор не будет найден, пока покупатель в точности не подберёт галочки.
Попробуйте подвести к варианту DVI+HDMI
Когда я выберу в вашем фильтре DVI , то я не увижу товаров, так как у большинства будет HDMI и DVI .
Почти такой же пример, обувь, размеры 38,39,40,41,42 . У товара отмечена 40, 41, 42 . Товар не будет показан покупателю, если покупатель кликнет 40 .
Там есть фильтры "Поддерживаемые цифровые стандарты" или любой другой, они работают также.
Я примерно понимаю, что вам требуется, скорее всего логика данного типа характеристики и фильтра вам не подходит. Существующий фильтр ищет все варианты, а не строгое попадание.
Иначе, по вашей логике, не один телевизор не будет найден, пока покупатель в точности не подберёт галочки.
Попробуйте подвести к варианту DVI+HDMI
Когда я выберу в вашем фильтре DVI , то я не увижу товаров, так как у большинства будет HDMI и DVI .
Почти такой же пример, обувь, размеры 38,39,40,41,42 . У товара отмечена 40, 41, 42 . Товар не будет показан покупателю, если покупатель кликнет 40 .
>Когда я выберу в вашем фильтре DVI , то я не увижу товаров, так как у большинства будет HDMI и DVI .
Увидите т.к. выберутся все у которых есть DVI, Нужно не точное соответствие а точное вхождение по выбранным параметрам, невозможные сочетания будут отсекатся на кажой итерации в которой добавляется новая галочка. У Вас сейчас ИЛИ, МНЕ нужно И. По обуви согласен там нужно по другому, в итоге в настройках нужно дклать еще один подвид [Флажек несколько И; Флажек несколько ИЛИ]. Я то выкручусь уже даже придумал как но это очередной костыль ... Правильные еще у крупных парйс агрегаторов, как и правило хорошего тона по поводу колличества товара который отобразится при выборе значения в скобочках :)
>Когда я выберу в вашем фильтре DVI , то я не увижу товаров, так как у большинства будет HDMI и DVI .
Увидите т.к. выберутся все у которых есть DVI, Нужно не точное соответствие а точное вхождение по выбранным параметрам, невозможные сочетания будут отсекатся на кажой итерации в которой добавляется новая галочка. У Вас сейчас ИЛИ, МНЕ нужно И. По обуви согласен там нужно по другому, в итоге в настройках нужно дклать еще один подвид [Флажек несколько И; Флажек несколько ИЛИ]. Я то выкручусь уже даже придумал как но это очередной костыль ... Правильные еще у крупных парйс агрегаторов, как и правило хорошего тона по поводу колличества товара который отобразится при выборе значения в скобочках :)
И кстати, вообще не логично. Для меня важен интерфейс HDMI , я щёлкаю и его в фильтре и ваш магазин мне не покажет вариантов. Почему? Потому что нужно было щёлкнуть HDMI и DVI .
Если нужно точное соответствие, то используйте другой тип характеристики, тем более вариантов в вашей характеристике не много.
Вариантов решения много, например, вы можете ввести свой тип характеристики и расширить фильтр. Там есть хуки и схемы для расширения.
Каждый проект имеет свои особенности. Приводить в пример агрегаторов давольно странно, так как это совершенно другой уровень:
1. Обрезанные и стандартизованные данные у агрегатора.
2. Каждый агрегатор имеет разработан с нуля + штат программистов + неограниченные серверные мощности.
3. Отложенная индексация и обновление данных.