2017-11-22 7 views
1

複数の値を一度に更新しようとしているテーブルがあります。ここでは、コードは次のようになります。WHERE句を使用して複数の値を同時にpostgresテーブルに挿入するには

INSERT INTO movements 
     ( 
        movements_datetime, 
        movements_user_id, 
        movements_product_id, 
        movements_reason_id, 
        movements_netto_price, 
        movements_brutto_price, 
        movements_quantity, 
        movements_f 
     ) 
     VALUES 
     ( 
        '" . date('y-m-dH:I:s') . "', 
        '" . $id . "', 
        unnest($product_id), 
        15, 
        ( 
          SELECT product_purchase_price 
          FROM products 
          WHERE product_id=unnest($product_id)), 
        0, 
        0, 
        'false' 
     ) 

ERROR:PRODUCT_IDが...^

PHPコードは

for ($i=0; $i < count($_POST['actual_stock']); $i++) { 
    if($_POST['actual_stock'][$i]!=''){ 
     $actual_stock[] = $_POST['actual_stock'][$i]; 
     $product_id[] = $_POST['product_id'][$i]; 
    } 

} 


$actual_stock= 'array['. implode(',', $actual_stock). ']'; 
$product_id = 'array['. implode(',', $product_id). ']'; 
ある製品から...選択product_purchase_price:セットLINE 1を返してはいけませんWHEREの引数
+0

これは、PHPコードのですか? –

+0

これはpostgresqlで、 "array [10,20,30,40]"という配列はPHPからです –

答えて

0

このようにVALUESを使用することはできません。あなたはproductsからペア(product_id, price)を取得したい場合は、WHERE句でany(array)を使用して、テーブルを照会する必要があります。

select product_id, price 
from products 
where product_id = any(array[10, 20, 30]); 

insert文は次のようになります。

insert into movements(datetime, user_id, product_id, netto_price) 
select '2017-11-21', 1234, product_id, price 
from products 
where product_id = any(array[10, 20, 30]); 
+0

ありがとう。私は不要なネストをWHEREで使用しました。 –