2015-07-19 73 views
2

我想要選擇與MAX一樣的列數。原始查詢將如下所示:SELECT users.id, ..., MAX(ur.rank) AS rank但我無法弄清楚如何使用Laravel提供的查詢生成器在Eloquent中執行此操作。Laravel雄辯 - 選擇MAX與其他列

這是我的嘗試:

$user = User::join('users_ranks AS ur', function($join) { 
    $join ->on('ur.uid', '=', 'users.id'); 
}) 
->where('users.id', '=', 7) 
->groupBy('users.id') 
->first(['users.id', 'users.username', 'MAX(ur.rank) AS rank']); 

我根本無法弄明白。我想要實現的是我選擇users.id = 7的用戶,並且我想選擇users_ranks中的最高級別,其中的users_ranks.uid = users.id。

有人告訴我,當處理大型結果集時避免使用子查詢,它可以顯着減慢速度。

任何人都可以指向正確的方向嗎?謝謝。

+0

查詢構建器是否允許您沿'SELECT MAX(等級)FROM users_ranks WHERE uid = 7'行創建某些內容?只要做兩個查詢? – Luke

回答

5

我想你應該重寫它是這樣的:

DB::table('users') 
    ->select(['users.id', 'users.username', DB::raw('MAX(ur.rank) AS rank')]) 
    ->leftJoin('users_ranks AS ur', 'ur.uid', '=', 'users.id') 
    ->where('users.id', '=', 7) 
    ->groupBy('users.id') 
    ->first(); 

如果以後使用表名和想不獲取所有字段('users.id', 'users.username')的沒有意義的使用User::