我正在尝试将一个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.有人可以指向正确的方向吗?谢谢
答案 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。所以步骤是:
然后,要查询订单的所有项目,您可以这样查询:
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的表格也是一件好事,但这只是一个意见问题。