2014-11-22 79 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