2017-02-06 72 views
0

我正在過濾我的產品,但我似乎只是在實際存在視圖記錄的情況下獲取產品。Laravel - selectRaw count - IF NULL設置爲零

我該如何設置「IF NULL = 0」或甚至更智能?

這裏是我的代碼:

if ($request->sort == 'views') { 
    $query->leftJoin('analytics', 'foreign_id', '=', 'ads.id'); 
    $query->selectRaw('ads.*, IFNULL(count(analytics.id),0) as views'); 
    $query->orderBy('views', "$sort_order"); 
} 

我的DB是這樣的: ID | ip | foreign_id | foreign_type | updated_at | created_at

現在,我在我的數據庫中有一行,並與該ID的產品我唯一一個顯示。

非常感謝您的提前。

+0

你想只有沒有空視圖的項目? – Cedric

+0

IF NULL = 0,基本上你想要類似NOT IS NULL(analytics.id)的東西嗎? – Cedric

+0

即使它們有0個視圖,我也希望獲得所有產品,但由於左連接上沒有行,因此它不會將關鍵「視圖」添加到我的對象中。 – RK4002

回答

2

的解決方案是小組,那麼它的工作完美。

if ($request->sort == 'views') { 

    $query->leftJoin('analytics', 'foreign_id', '=', 'ads.id'); 
    $query->selectRaw('ads.*, count(analytics.id) as views'); 
    $query->orderBy('views', "$sort_order"); 
    $query->groupBy('ads.id'); 

} 
+1

很高興你解決它!順便說一句,你可以標記自己是正確的答案!所以下一個在這個問題上的人將有一個容易的時間得到他的答案:) – devk

+0

謝謝,我會做到這一點。 :-) – RK4002

0

我認爲COALESCE(假設MySQL)是你正在尋找的。試試這個:

if ($request->sort == 'views') { 
    $query->leftJoin('analytics', 'foreign_id', '=', 'ads.id'); 
    $query->selectRaw('ads.*, COALESCE(count(analytics.id),0) as views'); 
    $query->orderBy('views', "$sort_order"); 
} 
+0

感謝您的時間,這對我來說沒有任何影響,它獲得了與我的分析表中相同的產品。 :-) – RK4002

0
if ($request->sort == 'views') { 
    $query->leftJoin('analytics', 'foreign_id', '=', 'ads.id'); 
    $query->whereNotNull('analytics'); 
    $query->selectRaw('ads.*, analytics.id as views'); 
    $query->orderBy('views', "$sort_order"); 
} 

我離開這個一個是目前的建議 - 我敢肯定,你想它不會工作,但它只是提供了一些方向

+0

謝謝你的回答,它確實是相反的,這就是爲什麼im困惑。我想留下連接視圖,無論有多少行存在,即使沒有行存在,那麼它應該只是在計數0我想, – RK4002