我这里有一张与客户订单相对应的表格。我使用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与属于它的产品相关联?
答案 0 :(得分:1)
使用函数last_insert_id()
。它将为您提供在调用之前自动递增为最后一个值的值。
答案 1 :(得分: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
中,以便在发生任何错误时可以回滚。
答案 2 :(得分:0)
答案 3 :(得分:0)
正如其他人评论的那样,它取决于RDBMS。在Oracle中,您通常使用sequences。您可以在数据库上创建和存储序列,并可以INSERT
在sequencename.nextval()
上使用它。
使用序列可以控制起始值,递增/递减大小,缓存等等。
答案 4 :(得分: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']}')";
感谢所有试图帮助的人!他们让我以正确的方式!