Как вернуть productid в этом примере MySQL?

0

как вернуть productid, которые имеют фильтрацию, равную x и y.

это Изображение 174551 - таблица выбора и возврата

запрос:

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. @Эдвард Мендес

этот результат

Теги:

3 ответа

0

Если вам нужен список значений 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
  • 0
    Уважаемый @GordThompson, не работает для меня, выберите в 250000 строк. Выберите верните 1901 или 1855
  • 0
    @ KoroshMan1989 - я не понимаю ваш комментарий. Вы говорите, что запрос завершается и не возвращает строк? ... возвращает слишком много строк? ... зависает и не завершает?
Показать ещё 5 комментариев
0

Используйте OR вместо предложения AND.

WHERE product_id в() ИЛИ filter_id в() ИЛИ product_id не в()

  • 0
    спасибо. Я хочу, чтобы команда была переменной. Эти цифры являются примерами.
  • 0
    Вы не можете напрямую иметь переменную в SQL. Переменные могут быть использованы через языки программирования или pl / sql
Показать ещё 5 комментариев
0

Удалите 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
  • 0
    Я хочу, чтобы команда была переменной. Эти цифры являются примерами.
  • 0
    Моя единственная мысль - установить переменные в верхней части запроса, которые можно изменить.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню