@aassdds
Люблю борщ и PHP

Как выбратьзаписи из нескольких таблиц?

Добрый день!
Есть 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 те И ТОЛЬКО те которые есть в фильтре
Мне кажется или надо копать в сторону цикла ?
  • Вопрос задан
  • 65 просмотров
Решения вопроса 1
@SharuPoNemnogu
не язык плохой, программисты такие...
SELECT o.id
FROM order o
INNER JOIN order_extra_service oes ON oes.order_id = o.id
WHERE oes.extra_id IN (1,2,3)
GROUP BY o.id
HAVING COUNT(oes.extra_id) = 3

oes.extra_id IN (1,2,3) - тут все фильтры
HAVING COUNT(oes.extra_id) = 3 - указывает, что у order должны быть все три фильтра
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы