2

あるmysqlテーブルから別のテーブルに値を直接コピーしようとしています...しかし、問題は、コピーする行が多いため、サブ選択ステートメントは多くの行を返しますが、パラメータ:order_idは一度だけ書き込まれます.

その問題を考えると、このプロセスを書く方法を理解するのに苦労しています:

# 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

3 に答える 3

4

もしかしてこれ使える?

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

クエリを作成するには、まず、SELECT挿入するすべてのフィールドを提供する a を作成します。次に、先頭に追加INSERT INTO <table>して完了です。

于 2012-04-23T13:50:18.757 に答える
1

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;
于 2012-04-23T13:49:58.030 に答える
1

以下のクエリを使用してみてください。このタイプの構文は、過去に私にとってはうまくいきました。WHEREMySQLINSERTステートメント ( manual ) にno がないため、その部分を削除しました。また、 ( manualVALUES )を実行するときにキーワードを使用しないでください。INSERT...SELECT

$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)
  ';
于 2012-04-23T14:15:47.673 に答える