У товара есть фильтры. Например, мужской, длинный, зимний. Фильтр фильтрует так, что при выборе мужского и зимнего выбираются не только мужские и зимние, но и все товары, которые имеют фильтр зимний. В том числе, женские.
Сначала там сделано так:
SELECT p.product_id, pf.filter_id as filters
FROM oc_product_to_category p2c
LEFT JOIN oc_product_filter pf ON (p2c.product_id = pf.product_id)
LEFT JOIN oc_product p ON (pf.product_id = p.product_id)
WHERE p.status = '1'
AND p.date_available <= NOW()
AND p2c.category_id = '59'
ORDER BY pf.filter_id ASC
LIMIT 0,100
Получаем набор (product1, filter1) (product1, filter2)
Попробовал сделать group_concat и потом проверять каждый фильтр как 2 in (filters) где filters это group_concat(pf.filter_id) из вложенного запроса, но они работают только по одному, а если в условии написать несколько через and, то результат - 0 рядов.
Вопрос - как сделать так, чтобы фильтры отсеивали?
Тебе нужно сделать так что фильтры работали только с мужской категорией
контентщики потом охуеют обновлять фильтры
могу предложить что-то типа select product_id from filters where product_id in (select product_id from filters where filter_id = "айди1") and product_id in (select product_id from filters where filter_id = "айди2")...
Решил с помощью HAVING find_in_set(2, filters) <> 0, где filters это group_concat(pf.filter_id)
Обсуждают сегодня