0

誰でもmysqlクエリを手伝ってくれますか。insert select ステートメントを使用して複数の行を挿入しようとしています。

if ($insert_stmt = $mysqli->prepare("INSERT INTO order_processing_info (order_id, cart_item_id, item_id, price, quantity) VALUES (?, (SELECT s.cart_item_id, i.item_id, i.price, s.quantity FROM inventory_info AS i, cart_info AS s  WHERE i.item_id=s.item_id AND s.user_id = ?))")) {
                    $insert_stmt->bind_param('ss', $order_id, $user_id);

よくわかりませんが、ここにすべての挿入に同じorder_idが必要なため、問題があると思います。

以前、select ステートメント ブロックで実行しようとして失敗しました。

if ($select_stmt = $mysqli->prepare("SELECT i.item_id, i.price, s.quantity, s.cart_item_id FROM inventory_info AS i, shopping_cart_info AS s  WHERE i.item_id=s.item_id AND s.user_id = ?")) {
        $select_stmt->bind_param("s", $user_id);
        $select_stmt->execute();
        $select_stmt->bind_result($item_id, $price, $quantity, $cart_item_id);

        while ($select_stmt->fetch()) {

            if ($insert_stmt = $mysqli->prepare("INSERT INTO order_processing_info (order_id, cart_item_id, item_id, price, quantity) VALUES (?, ?, ?, ?, ?)")) {
                $insert_stmt->bind_param('sssss', $order_id, $cart_item_id, $item_id, $price, $quantity);
                // Execute the prepared query.
                if (!$insert_stmt->execute()) {
                    header('Location: ../error.php?err=INSERT failure: INSERT');
                    exit();
                }
            }
        }
        $select_stmt->close();
    }

私はstackoverflowでそれをよく調べましたが、私はデータベースクエリに精通していないと思うので、誰かが私を助けてくれれば幸いです.

4

1 に答える 1

0

「INSERT INTO SELECT」クエリ ( http://www.w3schools.com/sql/sql_insert_into_select.asp ) を使用します。バインドする必要があるパラメーターは 1 つだけで、次にユーザー ID です。また、ループ内のクエリのオーバーヘッドも節約できます

于 2015-11-08T03:03:46.803 に答える