как вернуть productid, которые имеют фильтрацию, равную x и y.
это - таблица выбора и возврата
запрос:
SELECT p.product_id,pf.filter_id
FROM oc_product p
LEFT JOIN oc_product_filter pf
on p.product_id=pf.product_id
where p.product_id in(96621,97026) and pf.filter_id in (1901,1855 )
group by p.product_id,pf.filter_id
Результат обработки:
product_id filter_id
96621 1855
96621 1901
97026 1901
но я хочу получить product_id
который filter_id=1855 and filter_id=1901
.
хотите показать only product_id=96621
и not return product_id=97026
основной запрос:
SELECT p.product_id
FROM oc_category_path cp
LEFT JOIN oc_product_to_category p2c
ON (cp.category_id = p2c.category_id)
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)
LEFT JOIN oc_product_description pd
ON (p.product_id = pd.product_id)
LEFT JOIN oc_product_to_store p2s
ON (p.product_id = p2s.product_id)
WHERE pd.language_id = 2 AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = 0
AND cp.path_id = 86125
AND pf.filter_id in(1901,1855)
GROUP BY p.product_id
ORDER BY p.price DESC, p.sort_order
попробуйте и проверьте:
1. @GordThompson:
2. @Эдвард Мендес
Если вам нужен список значений product_id, которые имеют как filter_id = 1901, так и filter_id = 1855, вы можете использовать
SELECT product_id
FROM oc_product_filter
WHERE filter_id IN (1901,1855)
GROUP BY product_id
HAVING COUNT(*) = 2
или, если в таблице может быть несколько экземпляров определенного фильтра_id для данного product_id, вы можете использовать
SELECT t.product_id
FROM
(
SELECT DISTINCT product_id, filter_id
FROM oc_product_filter
) t
WHERE t.filter_id IN (1901,1855)
GROUP BY t.product_id
HAVING COUNT(*) = 2
Используйте OR вместо предложения AND.
WHERE product_id в() ИЛИ filter_id в() ИЛИ product_id не в()
Удалите product_id из вашего предложения IN для 97026. Также удалите группу из-за отсутствия агрегирования.
SET @product_id = xxx
SET @filter_id = xxx
SELECT p.product_id,pf.filter_id
FROM oc_product p
LEFT JOIN oc_product_filter pf
on p.product_id=pf.product_id
where p.product_id in(@product_id) and pf.filter_id in (filter_id)
#group by p.product_id,pf.filter_id