在MySQL数据库中为一个orderid添加多个项目

时间:2014-12-29 18:11:20

标签: mysql database structure

我正在尝试将一个orderid下的多个项目插入到我的数据库中,而我却不知道如何执行此操作。

我当前的数据库表结构:

order
orderid (auto increment)
productdesc
quantity

数据库中的当前结果(当从datagrid添加项目时)

orderid   productdesc   quantity  
1         test          1          
2         value         2
3         demo          3

期望的结果

orderid productdesc quantity
1       test        1  
1       value       2
1       demo        3

有没有办法在下一个订单到来之前为一个orderid添加多个项目,这意味着orderid将是2.有人可以指向正确的方向吗?谢谢

1 个答案:

答案 0 :(得分:5)

您应该在单独的表,orderitems(或订单行)中添加项目。订单表包含有关订单的主要信息,每个项目包含一个产品,它有一个orderid,它引用主要记录的ID。 orderitem中的orderid称为foreign key,因为它引用了另一个表的primary key

orders
orderid   customer
(auto inc) 
1         John Doe
2         Jane Doe
3         Jim Doe

orderitems
orderitemid orderid   productdesc   quantity 
(auto inc)  (FK)
1           1         test          1          
2           1         value         2
3           1         demo          3
4           2         test          2
5           3         demo          1
6           3         value         1

因此,当您要插入订单时,在orders中插入一条主记录,在orderitems中插入一个产品。插入项目时,您需要指定它所属的orderid。数据库本身无法知道您的意思。只要您知道要修改的订单的orderid,即使您已创建新订单,也可以继续向其添加商品。

您可以使用MySQL's function last_insert_id获取该ID。所以步骤是:

  • 插入订单
  • 获取订单ID
  • 插入项目

然后,要查询订单的所有项目,您可以这样查询:

select
  o.orderid,
  o.customer
  oi.orderitemid,
  oi.productdesc,
  oi.quantity
from
  orders o
  inner join orderitems oi on oi.orderid = o.orderid
where
  o.orderid = 1

或者,如果您只需要项目:

select
  oi.orderitemid,
  oi.orderid,
  oi.productdesc,
  oi.quantity
from
  orderitems oi
where
  oi.orderid = 1

您是否想要将订单项也称为id,这是一个偏好问题。我认为提供类似于surrogate key的表格也是一件好事,但这只是一个意见问题。