2017-11-04 8 views
-2

にどのように私はLaravel 5.2でこのクエリを行うことができます。、サブクエリはどこ更新

UPDATE product p 
    SET price = (SELECT price FROM product_price WHERE product_id = p.id AND price > 0 AND inventory > 0 AND active = 1 ORDER BY price desc limit 1) 
    SET discounts = (SELECT discount FROM product_price WHERE product_id = p.id AND price > 0 AND inventory > 0 AND active = 1 ORDER BY price desc limit 1) 
    WHERE 
    product_state = 1 

私はデシベルでこれを実行することができますか?

答えて

0

この種の複雑なクエリには、Raw式を適用できます。ここでは公式Laravelドク上の例での参照は次のとおりです。

https://laravel.com/docs/5.5/queries#raw-expressions

+0

この文書のどの行を私の答えとすることができますか? :) –

0

私たちは、あなたの正確なDBスキーマを参照する必要があるだろう、といくつかのデータは、確認することが、次は正しい軌道に乗って次のようになります。

use DB; // Ensure we have access to the DB facade 

$result = DB::table('product') 
    ->where('product_state', '=', 1) 
    ->update([ 
     'price'  => DB::raw('(SELECT price FROM product_price WHERE product_id = product.id AND price > 0 AND inventory > 0 AND active = 1 ORDER BY price desc limit 1)'), 
     'discounts' => DB::raw('(SELECT discount FROM product_price WHERE product_id = product.id AND price > 0 AND inventory > 0 AND active = 1 ORDER BY price desc limit 1)') 
    ]); 
+0

構文エラーまたはアクセス違反:1064 SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルを確認してください。右側の 税は、 'SELECT price FROM product_price WHERE product_id = product.id AND price> 0 AND'の行1にあります。 –

+0

答えに欠けている括弧が追加されました。今期待通りに更新する必要があります。 –

関連する問題