Выберите позиции заказа каждого заказа, которые содержат определенный продукт - PullRequest
0 голосов
/ 20 марта 2019

В базе данных mysql есть специальная таблица, в которой хранятся позиции заказа

+----+------------+----------+--------+------+------+------+------+
| id | product_id | order_id | source | col1 | col2 | col3 | col4 |
+----+------------+----------+--------+------+------+------+------+
|  1 |          1 |        1 | store1 | x    | y    | z    | w    |
|  2 |          2 |        1 | store1 | x    | y    | z    | p    |
|  3 |          1 |        2 | store1 | a    | s    | d    | f    |
|  4 |          1 |        2 | store2 | g    | h    | j    | k    |
+----+------------+----------+--------+------+------+------+------+

Внешний ключ заказа - order_id и source, потому что может быть один и тот же идентификатор заказа с другим источником. Эта таблица собирает товары из нескольких магазинов. Есть также ~ 40 других полей, которые не являются ключевыми. Существует существующий интерфейс для управления этими элементами, с множеством фильтров для полей, таких как фильтры даты, фильтр продукта, фильтр источника и еще ~ 20 и любая их комбинация. В структуре MVC, которая обрабатывает это, я строю запрос динамически на основе фильтров и предоставляю его для модели, которая управляет извлечением элементов, подсчетом pagiantion и т. Д.

Цель состоит в том, чтобы расширить этот запрос с помощью новой опции: когда есть активный фильтр для product_id и менеджер ставит новый флажок, мне нужно выбрать не только строки с указанным product_id, но и каждую строку с тот же код заказа + источник, который содержит выбранный продукт.

Например, когда я фильтрую product_id = 2 в примере, я получаю id = 2, но с новой опцией я должен получить id = 1 и id = 2, потому что эти элементы принадлежат к одному и тому же порядку (order_id = 1 и source = ' store1 '), и этот заказ содержит product_id = 2 Конечно, следует применять и другой фильтр, например, когда фильтр количества активен, я должен также применить его. Есть также соединения с другими таблицами, такими как продукты, штаты, страны и т. Д.

Пока у меня есть только базовый выбор с ~ 20-30 необязательными фильтрами и порядок для любого активного столбца.

SELECT * 
  FROM orderitems
    JOIN products USING (product_id)
  WHERE 1 
 [optional: AND product_id=1 AND quantity>2 AND country_id=123 AND created_time>"2019-01-01" etc]
  ORDER BY created_time DESC

Есть идеи, как мне его расширить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...