问问题
93 次
3 回答
2
添加额外subquery
内容,每次只能获得一种产品order_id
Select
orders.id,
orders.order_price,
orders.purchase_date,
customers.email,
product_orders.qty,
products.name
from
orders
INNER JOIN product_orders on orders.id=product_orders.orders_id
INNER JOIN
(
SELECT orders_id, MIN(Product_ID) prodID
FROM product_orders
GROUP BY orders_id
) c ON product_orders.orders_ID = c.orders_id AND
product_orders.Product_ID = c.prodID
INNER JOIN products on product_orders.product_id=products.id
INNER JOIN customers on orders.customer_id =customers.id
SQLFiddle 演示
于 2012-10-16T09:03:46.667 回答
1
您需要三个新表:
Bundles (ID, Name)
BundleProducts (BundleID, ProductID)
OrderLines (ID, OrderID, ProductID, BundleID, Qty)
假设 Bundles 包含:
ID Name
1 IPad & Android
并且 BundleProducts 包含
BundleID ProductID
1 2
1 3
然后,当客户将产品添加到他们的订单中时,您将 ProductID 插入 OrderLines 表中。如果他们添加了一个 Bundle,则将其插入 BundleID。订单完成后,您可以使用填充了 Product_ID 的 OrderLines 表中的每个产品填充 Product_Orders 表,如果填充了 ProductLines.BundleID,还使用 BundleProducts 表中的每个 ProductID。
或者,您可以将捆绑包本身制作成产品。这意味着您不需要 Bundles 表,但仍需要 BundleProducts 表。此外,您不需要 OrderLines 中的 BundleID 列。因此,“Ipad & Android Bundle”成为 Products 表中的新产品。
订单完成后,您将执行以下操作:
INSERT INTO
Product_Orders (Orders_id, Product_ID, Qty)
SELECT
Orders.ID,
COALESCE(BundleProducts.ProductID, OrderLines.ProductID),
OrderLines.Qty
FROM
Orders
INNER JOIN OrderLines ON Orders.ID = OrderLines.Orders_ID
LEFT JOIN BundleProducts ON OrderLines.ProductID = BundleLines.BundleID
于 2012-10-16T09:44:29.160 回答
0
Select orders.id, orders.order_price, orders.purchase_date, customers.email, product_orders.qty, products.name
from orders
INNER JOIN product_orders on orders.id=product_orders.orders_id
INNER JOIN products on product_orders.product_id=products._id
INNER JOIN customers on orders.customer_id =customers.id
GROUP BY orders.id
添加 GROUP BY orders.id
于 2012-10-16T08:57:42.200 回答