2014-11-22 187 views
0

我很难弄清楚如何链接PHP/MySql项目中的数据库行。我的订单提交脚本目前分割信息并将其存储到2个表格中。Mysql表关系/外键?

第一个被称为“订单”,包含:

$OrderId, $CustomerName, $CustomerEmail, $OrderTotal, $OrderTaxes 
//and other infos about the ORDER 

第二个被称为“项目”,包含所有购买产品的相关信息:

$ProductId, $OrderedQty 
//for each one and such... 

它必须是这个因为“Items”表将由不同的“部门”进行搜索,这些“部门”只会显示他们负责的部分订单。 但他们都必须获得“订单”的信息用于装运目的。

了解“OrderId”列是“Orders”表本身生成的主键,并且我的INSERT TO命令同时执行,如何链接两个“Order Id”列桌子?

我必须生成一些随机密钥来匹配它们吗?

如果我要使用外键,那么数据库将如何知道哪个产品使用哪个顺序,因为它们是同时被子提取的?

或者它是否足够快以插入“订单” - >选择$订单ID - >插入“项目”?

通常如何做到这一点?无法弄清楚这一点。

在此先感谢您的宝贵帮助!

回答

1

买过的产品信息应该有一个额外的栏目叫做orderid,所以你知道哪些产品属于哪个订单。 至于插入数据库这取决于你用来执行查询。某些查询类,允许你在一个去运行多个查询语句,如果这是你可以运行类似的东西的情况:

INSERT INTO Orders (OrderId, CustomerName, CustomerEmail, OrderTotal, OrderTaxes) Values(...) 
SET @order_id = LAST_INSERT_ID(); 
INSERT INTO boughtItems (OrderId,ProductId,OrderedQty) Values (@order_id, :productid_1, :name_1),(@order_id, :productid_2, :name_2),(@order_id, :productid_3, :name_3) .... 

为了情况下,你需要运行命令插入语句,然后得到首要的关键。 看看这些链接:

在其他情况下,你可以使用一个类,它允许你获得最后插入的id。这个id是连接绑定的,所以不应该给出任何问题(只要插入工作,你没有在一个查询中做多个插入,做回滚或其他奇怪的东西)。 在这种情况下,你会做一个插入,然后调用一个辅助函数来获取插入的ID。 请参见以下链接:

另外,您也可以执行2个查询。首先插入查询,然后这个查询:

SELECT LAST_INSERT_ID() as id; 

其他相关链接:

+0

如何当2人在同一时间发送给他们的订单,LAST_INSERT可能会返回错误的ID吗?此外,“有一个额外的列购买产品表称为orderid,所以你知道哪些产品属于哪个订单”是我想要实现的,但我必须得到这个ID值,但它还没有产生!我做错了 – 2014-11-22 21:40:46

+0

LAST_INSERT_ID是连接绑定的,所以只要你不在相同的连接中随机使用其他查询,它应该是一致的。看到这个[page](http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id)。 – user254948 2014-11-22 21:51:33

+0

您能否为我解释“连接绑定”?对不起:) – 2014-11-22 21:57:26