2017-06-23 4 views
0

I持っている第二に間違って行くように思われる次のクエリどこLaravelの複数

$query = Product::where('product_name', '!=', 'product_name'); 

$likes = DB::table('likes')->selectRaw('product_id, COUNT(*) as count') 
        ->groupBy('product_id') 
        ->orderBy('count', 'desc') 
        ->get(); 
foreach($likes as $like){ 
    if($like == $likes[0]){ 
     $query->where('aw_product_id', $like->product_id'); 
    } 
    else{ 
     $query->orWhere('aw_product_id', $like->product_id'); 
    } 
} 
$query->whereRaw('search_price != rrp_price'); 
$products = $query->get(); 

ので(search_price < rrp_price)、私は得る「search_price < rrp_price」を取る場合すべての商品は、値引きのない商品IDでフィルタリングされましたが、 'search_price < rrp_price'フィルタを残しても、何も起こっていないようです(search_priceとrrp_priceは常に同じです)。

私はwhere whereのステートメントで何かobvoiously wrongをしていますか?

+0

ここで、search_price Rahul

+0

search_price

+0

ああ申し訳ありませんが、それはすべきです!= 私は周りに遊んできました!=と<、しかし問題は両方に残っているので、それに依存しているように見えません –

答えて

0

!=の代わりに<>を試しましたか?多分それはあなたのクエリ修正クエリでエラーが

+0

'<>'特に? –

+0

これはSQLの「等しくない」演算子です。 –

+0

ああ、ありがとう、違いはありません。しかし、ありがとう! –

0

ありうまくいく以下の通りです:

foreach($likes as $like){ 
    if($like == $likes[0]){ 
     $query->where('aw_product_id', $like->product_id); 
    } 
    else{ 
     $query->Where('aw_product_id', $like->product_id); 
    } 
} 
+0

それはそれを 'どこで'、どこではなく 'どこにするのですか? クエリのその部分が機能しますが、それは動作しない価格フィルタです。 –

0

あなたは他のどこの構文を試してみましたか?このような何か:

->where('table.search_price', '<>', DB::raw('table.rrp_price')) 

それとも(Laravelは5+):

->whereColumn('table.search_price','<>','table.rrp_price') 
+0

どちらもうまくいかないようです。おそらく、値を文字列にキャストしている(価格の一部にGBPサフィックスが含まれている)ので、通貨の値を取り除き、浮動小数点数に変換していると言えるでしょう。 また、製品IDフィルタを使用せずに元の質問でクエリを実行すると、価格フィルタが機能します。奇妙な –

0

これは、値が文字列だったので、それが判明しました。私は 'search_price'と 'rrp_price'を浮動小数点型にキャストしていましたが、実際のlaravelクエリはデータベースの文字列値を比較しているようでした。

私はデータベースの値を浮動小数点に変更しました。今はクエリが機能します。