2016-09-30 12 views
0

は、私は2つのテーブルを持っている:LaravelのMySQLサブクエリで、クエリを結合して2番目のクエリの結果を新しいクエリとして最初のクエリに追加する方法は?

- PRODUCTS (having: ID, NAME, PRICE) 
- LIKES (having: ID, PRODID, NAME) 
私はサブクエリで製品が持っているすべての同類を数える(および新しい列として返す)しつつ、第1のテーブルを照会したいと思います

。次のクエリをどのように組み合わせることができますか?

$products = DB::table('PRODUCTS') 
        ->get(); 

$likes = DB::table('LIKES') 
        ->select(DB::raw('count(*) as total')) 
        ->where('PRODID', '=', 'product id from first table') 
        ->get(); 

Laravelクエリを使用してこれを達成するにはどうすればよいですか? ありがとう!

+0

のように試してみてください。 – Shadow

+0

私は試しましたが、LIKESテーブルに同じPRODIDを持つ複数の行があるため、2つの行を結合すると、一致しません。クエリは、私のPRODUCTSテーブルに重複した行を作成します。 –

+0

これはあなたがでグループを使用する理由です。私はあなたにSQLのソリューションを与えることができますが、私はそれを知らないので、あなたはlaravelにそれを翻訳する必要があります。 – Shadow

答えて

0

あなたが具体的に求めている回答ではなく、代わりにEloquentで処理するのは非常に簡単です。

$products = Product::with('likes'); 
foreach ($products as $product) { 
    echo 'Number of likes: '.$product->likes->count(); 
} 
0

副問合せではなく、group by句を使用して結合を使用します。このようにして、すべての製品のカウントを1回で取得できます。カウントを1つずつクエリする必要はありません。次のようにSQLは次のようになります。

select p.id, p.name, p.price, count(l.id) as likecount 
from products p 
left join likes l on p.id=l.prodid 
group by p.id, p.name, p.price 
0

は、製品テーブルのフィールド上で、サブクエリとしてそれを行う一緒に2つのテーブルを結合し、グループはいけないこの

$likes = DB::table('LIKES') 
     ->join('PRODUCTS', 'LIKES.PRODID', '=', 'PRODUCTS.id') 
     ->select('LIKES.*') 
     ->where('PRODUCTS.id', '=', 3)  
     ->get(); 
$total_like = count($likes); 
関連する問題