我试图让订单分成几部分。 1,3,20。没关系。 每个部分都意味着它从不同的仓库中取出这些产品。
我试过这个:
CREATE TABLE w_orders (
order_id int,
customer_id int,
PRIMARY KEY( order_id )
);
CREATE TABLE w_order_items (
order_item_id int,
order_id int,
warehouse_id int,
product_id int,
quantity int,
base_price int,
PRIMARY KEY( order_item_id )
);
CREATE TABLE w_order_parts (
order_part_id int,
order_id int,
part int,
warehouse_id int,
shipped int,
PRIMARY KEY( order_part_id )
);
w_orders
是分配唯一订单ID的位置,以及分配客户的位置。
w_order_items
是订单中的所有产品,来自多个仓库。
w_order_parts
是我遇到的麻烦。我需要这张桌子,因为在这里,我指出这个特定仓库的订单是否发货了。
我知道这需要用PHP处理才能看起来像这样。我不是在问这个问题。只是坚持数据库的设计和选择它。
当我尝试查询时,我会得到多个相同的w_order_items
。
SELECT
w_orders.order_id,
w_orders.customer_id,
w_order_items.order_item_id,
w_order_items.order_id,
w_order_items.warehouse_id,
w_order_items.product_id,
w_order_items.quantity,
w_order_items.base_price,
w_order_parts.order_part_id,
w_order_parts.order_id,
w_order_parts.part,
w_order_parts.warehouse_id,
w_order_parts.shipped
FROM
w_orders
LEFT JOIN w_order_items
ON w_orders.order_id = w_order_items.order_id
LEFT JOIN w_order_parts
ON w_orders.order_id = w_order_parts.order_id
WHERE w_orders.order_id = '100'
的链接
对于我想要实现的目标,这是一个很好的桌面设计吗?我如何在上图中正确地SELECT
项目?
答案 0 :(得分:2)
您只需要重新排列连接并在仓库ID中包含一个连接...
http://sqlfiddle.com/#!9/27bf7/3
SELECT
w_orders.order_id,
w_orders.customer_id,
w_order_items.order_item_id,
w_order_items.order_id,
w_order_items.warehouse_id,
w_order_items.product_id,
w_order_items.quantity,
w_order_items.base_price
FROM
w_orders
LEFT JOIN w_order_parts
ON w_order_parts.order_id = w_orders.order_id
LEFT JOIN w_order_items
ON w_order_items.order_id = w_order_parts.order_id
AND w_order_items.warehouse_id = w_order_parts.warehouse_id
WHERE
w_orders.order_id = '9898'
ORDER BY
w_orders.customer_id,
w_orders.order_id,
w_order_parts.warehouse_id,
w_order_items.order_item_id
这假定每个订单商品与订单部件表中的仓库匹配。
订单也会准备好您的结果以供日后格式化。