2013-05-16 81 views
0

我試圖用平均執行查詢和統計裏面的行的結果,這樣的事情:laravel 4,AVG和COUNT內連接查詢

SELECT r.id, avg(p.puntuacio), count(p.puntuacio) 
FROM receptes AS r, puntuacio_receptes_usuaris AS p 
WHERE r.id = p.recepta_id 
GROUP BY r.id 

但我不知道我能做到在Laravel上,因爲Eloquent不能在結果行中寫入平均值或計數。

非常感謝

回答

4

查詢生成器(流利)方法:

DB::table(DB::raw('receptes as r, puntuacio_receptes_usuaris as p')) 
     ->select(array('r.id', DB::raw('avg(p.puntuacio) as avg_p'), DB::raw('count(p.puntuacio) as count_p'))) 
     ->where('r.id', DB::raw('p.recepta_id')) 
     ->groupBy('r.id') 
     ->get(); 

這應該沒有任何問題,但如果你想與你的雄辯的模式去做的話,我建議使用JOIN,而不是在FROM使用兩個表。

您可以通過訪問avg_pcount_p來訪問平均值和計數結果。

注意

  • DB::raw()指示Laravel不是逃避什麼範圍內,see the doc
+0

它的作品!非常感謝你,但我有一個疑問,因爲當我嘗試訪問數組中的元素時,例如{{Puntuacio :: mitjanaTotesReceptes()[0] - > id}} 只能訪問id但我不能不知道如何訪問像avg或count這樣的其他元素,如果我執行sql查詢的列是:id,avg(p.puntuacio)和count(p.puntuacio) – Ruben

+0

爲您更新了答案。 – Usman

+0

非常感謝!但... 像{{Puntuacio :: mitjanaTotesReceptes()[0] - > avg_p}} ??? 因爲當我使用它顯示錯誤說:「未定義的屬性:stdClass :: $ avg_p」 – Ruben

1

您可以使用DB::raw()創建一個原始表達式,如果你需要使用的東西,否則由口才進行轉義。

有關示例,請參閱documentation on raw expressions

+0

謝謝你傑森 – Ruben