@89109983838

Как сформировать запрос Mysql с фильтром по одному стобцу несколкьо значений?

Есть простой код с запросом (узнаем есть ли фильтр по параметрам - категории, бренд, фильтр) :
SELECT COUNT(*) AS total FROM product_filter f
LEFT JOIN product p ON(f.product_id = p.product_id)
LEFT JOIN product_to_category c ON(p.product_id = c.product_id)
WHERE f.filter_id = '" . (int)$filter_id . "' AND c.category_id = '".(int)$category_id."' AND p.manufacturer_id = '".(int)$manufacturer_id."'"


Он работает все нормально!
НО никак не могу сформировать запрос чтобы также получить ПО НЕСКОЛЬКИМ ЗНАЧЕНИЯМ $filter_id, тоесть надо получить количество записей товаров у которых отмечено несколько фильтров.

пробовал f.filter_id IN (1,3,7) не то, так как возвращает любой из вариантов, а надо при наличии набота фильтров у одного товара. Экспериментировал с UNION - без результат но что-то, чотя с ним ранее не встречался.

П.С.: в таблице product_filter всего два столбца product_id и filter_id, тоесть у одного товара по его id может быть несколько id фильтров.
  • Вопрос задан
  • 124 просмотра
Решения вопроса 1
@89109983838 Автор вопроса
Спасибо SharuPoNemnogu - ваш комментарий что-то никак не отмечается решением... расписываю готовый вариант здесь.
ПОЛУЧИЛОСЬ ТАК!:

Учитывая что мы изначально не знаем сколько будет фильтров в запросе:
// $category_id = id  категории;
// $manufacturer_id = id производителя

$value = implode(',', $val_str);   //(массив id фильтров приводим к 'x,a,b,z.......' 
$value_num = count($val_str);  // считаем сколько фильтров -  чтоб в группе sql указать

!(структура ДБ CMS OPENCART)!

$query = "SELECT COUNT(DISTINCT p.product_id) AS total FROM product p
LEFT JOIN product_filter f ON(p.product_id = f.product_id)
LEFT JOIN product_to_category c ON(p.product_id = c.product_id)
WHERE f.filter_id in (". $value .") AND c.category_id = '".(int)$category_id."' AND p.manufacturer_id = '".(int)$manufacturer_id."'
GROUP BY p.product_id having count(f.filter_id) = '".$value_num."'";
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы