2012-04-23 82 views
1

我想直接从一个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

回答

4

也许你可以使用这个吗?

INSERT INTO ... SELECT ... FROM ... WHERE ... 

要创建查询,请先SELECT,让你所有要插入的字段。然后加上INSERT INTO <table>,就完成了。

+1

我想我做到了吗?但问题是,如何将参数':order_id'插入每行? – Ozzy 2012-04-23 13:55:08

+3

像'选择:ORDER_ID AS ORDER_ID,*'应该工作 – 2012-04-23 13:55:47

+1

好了,所以我删除了'values'词,改成了这样:'INSERT INTO TBL(ID,COL1,COL2)(SELECT,tbl2.col1, tbl2.col2 FROM ...)'应该工作正确吗?其实我想我应该使用':namedParam'这次,因为程序不会知道'''需要插入多少次? – Ozzy 2012-04-23 14:05:35

0

查找到SELECT INTO TABLE

INSERT INTO tbl_temp2 (fld_id) 
SELECT tbl_temp1.fld_order_id 
FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100; 
+0

但'order_id'进来作为一个参数,从'addOrder返回($ CUSTOMER_ID)' – Ozzy 2012-04-23 13:53:51

+0

你应该能够做到使用此语法动态查询。除非我错过了一些东西......但我不这么认为。 – 2012-04-23 13:55:34

+0

是的,你可以做...但我在当前查询中得到了什么?我已经写了'INSERT INTO tbl_name(ORDER_ID,COL1,COL2,COL3)'然后我把'VALUES(:ORDER_ID,SELECT(...))'和子'SELECT'会返回许多行 – Ozzy 2012-04-23 13:58:11

1

尝试使用下面的查询;这种类型的语法在过去对我有用。由于在一个MySQL INSERT声明(manual)没有WHERE我已删除的那部分。此外,请勿在执行INSERT...SELECTmanual)时使用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) 
    '; 
+0

谢谢,但我在3分钟前得出了这个确切答案,感谢@ tom-van-der-woerdt – Ozzy 2012-04-23 14:21:36

相关问题