Mysql表关系/外键?

时间:2014-11-22 09:50:35

标签: php mysql database

我很难确定如何在PHP / MySql项目中链接数据库行。我的订单提交脚本当前拆分信息并将其存储在2个表中。

第一个被称为"订单"并包含:

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

第二个被称为" Items"并包含所有BOUGHT产品信息:

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

必须是这样的,因为" Items"表格将由不同的部门和#34;谁只会出示他们负责的订单部分。 但他们都必须得到"订单"用于运输目的的信息。

知道" OrderId" column是在" Orders"上生成的主键。表本身,我的INSERT TO命令同时执行,如何链接"订单ID"两个表中的列?

我是否必须生成一些随机密钥才能匹配它们?

如果我要使用外键,那么数据库如何知道哪个产品与哪个订单同时提交?

或者是否足够快速地插入"订单" - > SELECT $ OrderID - >插入"项目" ?

通常如何做到这一点?无法解决这个问题。

提前感谢您的宝贵帮助!

1 个答案:

答案 0 :(得分: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) ....

在顺序情况下,您需要在订单上运行insert语句,然后获取主键。 看看这些链接:

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

或者您也可以执行2个查询。首先是插入查询,然后是此查询:

SELECT LAST_INSERT_ID() as id;

其他相关链接: