选择每个订单中包含特定产品的订单项

时间:2019-03-20 05:38:35

标签: mysql sql

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,因为可以有相同的订单ID,但来源不同。该表从多个商店收集订单商品。 还有〜40个其他字段不是关键。 现有一个用于管理这些项目的界面,其中包含许多用于字段的过滤器,例如日期过滤器,产品过滤器,源过滤器,以及大约20个以上的过滤器,以及这些的任意组合。 在处理此问题的MVC结构中,我基于过滤器构建查询异常,并将其提供给设法获取项目,计算页数等的模型。

目标是使用一个新选项扩展该查询:当有一个有效的product_id过滤器且经理选中一个新复选框时,我不仅需要获取具有指定product_id的行,还需要获取具有相同的order_id + source,其中包含选定的产品。

就像在示例中过滤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

任何想法我应该如何扩展它?

0 个答案:

没有答案