直接在MySQL中将多个行从一个表复制到另一个表?
我想直接从一个MySQL表中的值复制到另一个...但麻烦的是,有许多行复制,这样子选择语句将返回多行,但帕拉姆:order_id
只是写一次。直接在MySQL中将多个行从一个表复制到另一个表?
考虑这个问题,我有麻烦搞清楚如何写这个过程:
# 1: Create new Order & Copy the cart basket to the Order basket
$order_id = addOrder($customer_id);
if ($order_id > -1) {
$sql = "INSERT INTO tbl_order_basket(order_id, product_id, product_name,
basket_qty, basket_price, subtotal)
VALUES (:order_id, (SELECT (cart.product_id, product.name,
cart.cart_qty, cart.cart_price, cart.subtotal)
FROM tbl_shopping_cart AS cart
INNER JOIN tbl_product AS product
ON cart.product_id = product.id
WHERE cart.php_sesskey = :session_id)
)
WHERE order_id=:order_id;";
}
这里是我试图复制数据:
ORDER BASKET CART BASKET PRODUCTS
FK order_id FK php_sesskey
FK product_id <-- FK product_id === PK id
product_name <-- <-- name
basket_qty <-- cart_qty
basket_price <-- cart_price # <-- : copy to
subtotal <-- subtotal # === : join on
我应该如何去关于这样做?
注:我使用PHP 5和MySQL 5.5
也许你可以使用这个吗?
INSERT INTO ... SELECT ... FROM ... WHERE ...
要创建查询,请先SELECT
,让你所有要插入的字段。然后加上INSERT INTO <table>
,就完成了。
INSERT INTO tbl_temp2 (fld_id)
SELECT tbl_temp1.fld_order_id
FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
但'order_id'进来作为一个参数,从'addOrder返回($ CUSTOMER_ID)' – Ozzy 2012-04-23 13:53:51
你应该能够做到使用此语法动态查询。除非我错过了一些东西......但我不这么认为。 – 2012-04-23 13:55:34
是的,你可以做...但我在当前查询中得到了什么?我已经写了'INSERT INTO tbl_name(ORDER_ID,COL1,COL2,COL3)'然后我把'VALUES(:ORDER_ID,SELECT(...))'和子'SELECT'会返回许多行 – Ozzy 2012-04-23 13:58:11
尝试使用下面的查询;这种类型的语法在过去对我有用。由于在一个MySQL INSERT
声明(manual)没有WHERE
我已删除的那部分。此外,请勿在执行INSERT...SELECT
(manual)时使用VALUES
关键字。
$sql = '
INSERT INTO tbl_order_basket(order_id, product_id, product_name,
basket_qty, basket_price, subtotal)
SELECT :order_id, cart.product_id, product.name,
cart.cart_qty, cart.cart_price, cart.subtotal
FROM tbl_shopping_cart AS cart
INNER JOIN tbl_product AS product
ON cart.product_id = product.id
WHERE cart.php_sesskey = :session_id)
';
谢谢,但我在3分钟前得出了这个确切答案,感谢@ tom-van-der-woerdt – Ozzy 2012-04-23 14:21:36
我想我做到了吗?但问题是,如何将参数':order_id'插入每行? – Ozzy 2012-04-23 13:55:08
像'选择:ORDER_ID AS ORDER_ID,*'应该工作 – 2012-04-23 13:55:47
好了,所以我删除了'values'词,改成了这样:'INSERT INTO TBL(ID,COL1,COL2)(SELECT,tbl2.col1, tbl2.col2 FROM ...)'应该工作正确吗?其实我想我应该使用':namedParam'这次,因为程序不会知道'''需要插入多少次? – Ozzy 2012-04-23 14:05:35