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

har*_*ris 1 mysql database structure

我试图在orderid我的数据库中插入多个项目,我不知道如何做到这一点.

我当前的db表结构:

order
orderid (auto increment)
productdesc
quantity
Run Code Online (Sandbox Code Playgroud)

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

orderid   productdesc   quantity  
1         test          1          
2         value         2
3         demo          3
Run Code Online (Sandbox Code Playgroud)

期望的结果

orderid productdesc quantity
1       test        1  
1       value       2
1       demo        3
Run Code Online (Sandbox Code Playgroud)

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

Gol*_*rol 5

您应该在单独的表,orderitems(或订单行)中添加项目.订单表包含有关订单的主要信息,每个项目包含一个产品,并且它有一个orderid,它引用主要记录的ID.orderitem中的orderid称为a 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
Run Code Online (Sandbox Code Playgroud)

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

你可以使用MySQL的功能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
Run Code Online (Sandbox Code Playgroud)

或者,如果您只需要物品:

select
  oi.orderitemid,
  oi.orderid,
  oi.productdesc,
  oi.quantity
from
  orderitems oi
where
  oi.orderid = 1
Run Code Online (Sandbox Code Playgroud)

这是一个偏好问题,你是否想要给订单项一个id.我认为给出一张像这样的代理关键表是很好的,但这是一个意见问题.

  • 您可以通过将多个项目放入单独的表中来将多个项目添加到一个订单中。在该表中,“orderid”不应自动递增。我添加了一些更多的解释。简而言之,数据库不仅仅是一张表。在现实生活中的样本中。您将为客户、订单、订单项目以及可能的付款、发货、地址...提供单独的表。 (2认同)