Фильтровать товары по типу заказов - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь получить все товары в заказах типа «назначенный». Но что-то не так с моим sql, я думаю, что where orders.id in () проблема. Но я не могу понять, как это сделать.

Товары находятся во многих заказах с разным типом (назначенный, списанный, обслуживаемый). Мне нужно отфильтровать продукты в последних заказах типа «назначено», за исключением «услуги».

select `products`.`id` from `products` 
inner join `orders_products` on `products`.`id` = `orders_products`.`product_id` 
inner join `orders` on `orders_products`.`order_id` = `orders`.`id` 
where orders.id in (
    select MAX(order_id) from `orders_products` 
    where `product_id` = products.id
) 
and `orders`.`type_id` in (
    select `id` from `order_types` where `code` in ('assigned')
) 
group by products.id

Пример данных

order_types

[
  {id: 1, code: "assigned"},
  {id: 2, code: "retired"},
  {id: 3, code: "service"},
]

товары

[
  {id: 1},
  {id: 2},
  {id: 3},
  {id: 4},
  {id: 5}
]

заказы

[
  {id: 1, type_id: 1}, // assigned
  {id: 2, type_id: 3}, // service
  {id: 3, type_id: 3}, // service
  {id: 4, type_id: 2}, // retired
  {id: 5, type_id: 1}, // assigned
  {id: 6, type_id: 3}, // service
  {id: 7, type_id: 3}, // service
]

orders_products

[
  {order_id: 1, product_id: 1}, <--
  {order_id: 2, product_id: 1},
  {order_id: 3, product_id: 2},
  {order_id: 4, product_id: 3},
  {order_id: 5, product_id: 4}, <--
  {order_id: 6, product_id: 4},
  {order_id: 7, product_id: 5},
]

Поиск результатов

SQL должен вернуть идентификатор продукта 1, 4

1 Ответ

0 голосов
/ 08 мая 2020

Это ответ на исходную версию вопроса.

То, что вы описываете, звучит так:

select op.product_id
from orders_products op join
     orders o
     on op.order_id = o.id join
     order_types ot
     on ot.id = oo.type_id and
        ot.code = 'assigned'
group by op.product_id;

Примечания:

  • Псевдонимы таблиц делают запрос легче писать и читать.
  • Обратные кавычки просто заставляют все выглядеть беспорядочно, сложно для записи и чтения.
  • Я не вижу причин для первого подзапроса в вашем where clause.
  • Таблица products вам не нужна, потому что идентификатор продукта находится в order_products.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...