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.有人能指出我正确的方向吗?谢谢
您应该在单独的表,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 .所以步骤是:
然后,要查询订单的所有项目,您可以像这样查询:
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.我认为给出一张像这样的代理关键表是很好的,但这是一个意见问题.