2016-09-30 60 views
0

我有兩個表:Laravel中的MySQL子查詢,如何連接查詢並將第二個查詢的結果添加爲第一個查詢的新列?

- PRODUCTS (having: ID, NAME, PRICE) 
- LIKES (having: ID, PRODID, NAME) 

我想詢問的第一個表,同時計數(並返回一個新列)在一個子查詢中的所有產品都有喜歡。我怎麼能結合以下查詢?

$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

不要做它作爲一個子查詢,通過從產品表中的字段加入2代表一起組。 – Shadow

+0

我已經嘗試過了,但LIKES表有多個具有相同PRODID的行,所以當我加入這兩個行時將不匹配。該查詢將在我的PRODUCTS表中創建重複的行。 –

+0

這就是爲什麼你使用該組。我可以在sql中給你解決方案,但是你需要將它翻譯成laravel,因爲我不知道。 – Shadow

回答

0

不是你專門要求的答案,但作爲一種選擇,這將是非常容易處理與雄辯。

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

使用帶有group by子句的聯接而不是子查詢。通過這種方式,您可以一次性獲得所有產品的計數,而無需逐個查詢計數。在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

嘗試這樣

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