2015-04-22 106 views
2

我在這裏有一個對應於客戶訂單的表格。我使用AUTO_INCREMENT來確定訂單的ID。我有這樣的SQL代碼爲orders表:我怎樣才能得到一個自動遞增的值

CREATE TABLE IF NOT EXISTS `orders` (
    `order_id` int(11) NOT NULL AUTO_INCREMENT, 
    `customer_id` int(11) NOT NULL, 
    `customer_name` varchar(500) NOT NULL, 
    `order_total_price` decimal(20, 2) NOT NULL, 
    `order_date` varchar(100) NOT NULL, 
    PRIMARY KEY (`order_id`) 
) ENGINE=InnoDB 

我需要的是一個外鍵order_id插入每個訂單的產品的另一個表中指定的產品是屬於什麼樣的順序。爲purchased_products表的SQL代碼:

CREATE TABLE IF NOT EXISTS `purchased_products` (
    `order_id` int (11) NOT NULL, 
    FOREIGN KEY (`order_id`) REFERENCES orders(`order_id`), 
    `product_name` varchar(500) NOT NULL, 
    `product_price` decimal(20, 2) NOT NULL, 
    `product_quantity` int(11) NOT NULL, 
    PRIMARY KEY (`order_id`) 
) 

當用戶買東西,我用這個在orders表中插入數據:

INSERT INTO orders (customer_id, customer_name, order_total_price, order_date) 
VALUES ('{$customer_id}', '{$customer['customer_name']}', '{$order_total_price}', '{$order_date}')"; 

這裏是我的問題。我需要在purchased_products表生成的訂單ID插入產品:

INSERT INTO purchased_products (order_id, product_name, product_price, product_quantity) 
VALUES ('*/The ID of the order need to goes here*/', '{$product['product_name']}', '{$product['product_price']}', '{$product['quantity']}')"; 

這讓我頭疼。我真的不知道該怎麼做。這應該以不同的方式完成?如何將訂單ID與屬於它的產品關聯?

+1

有幾種方法可以確定「剛分配的」自動ids,但幾乎每個RDBMS都有自己的方法。因此,標準問題:您使用的是什麼RDBMS? –

+0

只是一個建議..使用'MAX()'方法..這將找出最後插入的'id' ..但請注意,只有在訂單表上沒有其他'insert'完成時,這將有所幫助。這只是一種方式 –

+0

RDBMS知道最後一次插入的自動遞增id到特定的表中。你可以得到它。就我所知,在mysql中它被稱爲LAST_INSERT_ID。但是,@Philip Kelley提到它取決於你正在使用的RDBMS。 – SayusiAndo

回答

0

我做到了用PDO lastInsertId()獲得最後插入的順序的ID:

$sql = "INSERT INTO orders (customer_id, customer_name, order_total_price, order_date) 
     VALUES ('{$customer_id}', '{$customer['customer_name']}', '{$order_total_price}', '{$order_date}')"; 

$query = $connection->prepare($sql);  
$query->execute(); 

$respective_order_id = $connection->lastInsertId(); 

然後:

INSERT INTO purchased_products (order_id, product_name, product_price, product_quantity) 
VALUES ('{$respective_order_id}', '{$product['product_name']}', '{$product['product_price']}', '{$product['quantity']}')"; 

感謝所有誰試圖幫助!他們讓我以正確的方式!

0

您可以通過使用@@IDENTITY

這裏的MSDN文章得到得到最後插入的主鍵值:https://msdn.microsoft.com/en-us/library/ms187342.aspx

USE AdventureWorks2012; 
GO 
--Display the value of LocationID in the last row in the table. 
SELECT MAX(LocationID) FROM Production.Location; 
GO 
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate) 
VALUES ('Damaged Goods', 5, 2.5, GETDATE()); 
GO 

SELECT @@IDENTITY AS 'Identity'; 
GO 
--Display the value of LocationID of the newly inserted row. 
SELECT MAX(LocationID) FROM Production.Location; 
GO 

我還建議包裹在TRANSACTION的聲明,因此如果任何錯誤發生你可以回滾。

+0

但我需要從表'orders'中獲取最後一個主鍵值,然後將其添加到'purchased_products'表中的'oder_id'。 – Dyan

0

您可以使用SCOPE_IDENTITY()檢索您在當前sql會話中插入的最後一個身份。

這裏是所有的差異很大描述了另一個問題:

identity scope Question

0

正如其他人評論說這取決於RDBMS。在Oracle中,您通常使用sequences。您可以在數據庫上創建並存儲序列,並通過執行sequencename.nextval()來在INSERT上使用它。

序列可讓您控制起始值,增量/減量大小,緩存等等。

相關問題