2012-04-23 131 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

相關問題