Добрый день!
Есть 2 таблицы: "заказы" и "экстра_услуги_заказов"
Заказы:
id - int 11
title - varchar 200
price - int 11
в этой таблице 1 строка:
-----------------------------------------------------------
id | title | price
-----------------------------------------------------------
1 | order_name | 200
-----------------------------------------------------------
Экстра_услуги_заказов
id - int 11
order_id - int 11 - id заказа
extra_id - int 11 - id экстра услуги
в этой таблице 2 строки:
-----------------------------------------------------------
id | order_id | extra_id
-----------------------------------------------------------
1 | 1 | 1
-----------------------------------------------------------
1 | 1 | 2
-----------------------------------------------------------
то есть как видно у заказа с id=1 есть 2 экстра услуги (1,2)
Так же на сайте есть фильтры по ценам и по экстра услугам
Если пользователь выбрал какие то фильтры - то все фильтры должны присутствовать у КАЖДОЙ записи в выборке
я делаю так
SELECT id FROM `order`
WHERE order.id IN
(SELECT order_id FROM order_extra_service
WHERE
( order_extra_service.order_id = order.id AND order_extra_service.extra_id = 1 )
OR
( order_extra_service.order_id = order.id AND order_extra_service.extra_id = 2 )
GROUP BY order_extra_service.order_id
)
и оно работает корректно - покажет нужный заказ
Но есть добавить extra_id, которого у заказа нет :
SELECT id FROM `order`
WHERE order.id IN
(SELECT order_id FROM order_extra_service
WHERE
( order_extra_service.order_id = order.id AND order_extra_service.extra_id = 1 )
OR
( order_extra_service.order_id = order.id AND order_extra_service.extra_id = 2 )
OR
( order_extra_service.order_id = order.id AND order_extra_service.extra_id = 3 )
GROUP BY order_extra_service.order_id
)
Так же выводится 1й заказ
Подскажите - как сделать так, чтобы выводились только те заказы, у которых есть extra_id те И ТОЛЬКО те которые есть в фильтре
Мне кажется или надо копать в сторону цикла ?