通过桥接表加入一对多的关系

时间:2013-07-18 18:44:41

标签: mysql sql

我有一个Products表,它映射到包含所述产品所包含的所有项目的桥接表,因此产品A可以包含多个项目或仅包含一个项目。 (OTM)

product_sub_item_bridge看起来像这样,

+------------+----------------------------+
| product_id | client_sub_product_item_id |
+------------+----------------------------+
|        137 |                        332 |
|        138 |                        333 |
|        139 |                        334 |
|        140 |                        332 |
|        140 |                        335 |
+------------+----------------------------+

所以说客户订购产品 140 ,商品 332 335 将被插入一个名为client_sub_products的表中与订单的关系以及存储在client_sub_product_items表中的项目本身。

我现在要做的是获取所有client_sub_products,将它们按client_order_id分组,然后将GROUP_CONCAT() ID分组,并以某种方式加入Products表通过桥接表将它放到它上面,以便我可以获得包含COUNT()的列表,其中包含由Products组成的所有client_sub_product_items。像这样......

+--------------+---------------------+
| product_name | count(product_name) |
+--------------+---------------------+
|    Product A |                  15 |
|    Product B |                  25 |
+--------------+---------------------+

这是我到目前为止所拥有的,

SELECT GROUP_CONCAT(`client_sub_products`.`client_sub_product_item_id`) FROM `client_sub_products` LEFT JOIN `client_sub_product_items` ON `client_sub_product_items`.`id` = `client_sub_products`.`client_sub_product_item_id` GROUP BY `client_sub_products`.`client_order_id` ORDER BY `client_sub_products`.`client_order_id` ASC;

我似乎无法通过桥接表,我不确定如何通过桥接表将client_sub_product_items加入Products,因为有些产品不止一个client_sub_product_item与此相关,我似乎在那里感到困惑。

我希望我已经充分解释了自己,而不仅仅是让所有人感到困惑......如果我想澄清上面提到的任何事情,请告诉我。

1 个答案:

答案 0 :(得分:0)

如果子产品不是可订购实体,为什么要将子产品关联到客户端?为什么不直接将产品分配给客户端,因为从中可以很容易地为每个客户端派生子订单?就目前而言,您没有明确的方法来确定您的示例中的子产品332是否与产品137或140相关。