2015-11-05 47 views
2

我有一個用戶和一個分數表。每個用戶有多個分數,例如:按組排序(查詢生成器)

  • 用戶1具有分數:45,66,98
  • 用戶2具有2分:75,45
  • 用戶3具有分數:94,66,12

只有每個用戶的最高分數是相關的。我想要達到的是獲得最高分的10位用戶。這適用於以下laravel查詢:

$results = Score::orderBy('score', 'desc') 
     ->groupBy('user_id') 
     ->limit(10) 
     ->get() 

該查詢的問題是,它返回的是最高用戶,但不是他們的最高分。它返回組中的第一個分數。所以,當我查詢了給定的例子,這將返回:

  • 1:用戶1,45
  • 2:用戶3,94
  • 3:用戶2,75

我怎樣才能讓肯定它會返回最高分的最高用戶?我試圖 - >明顯('分數'),但沒有奏效。

+0

你試圖「組第一,當時的秩序」? – Paladin

+0

是的,我做到了。這沒有什麼區別。 –

+1

這是一個錯誤? '' - > limit(10); - > get()''你在''limit()後面使用'';''' – jmattheis

回答

2

試試這個

$results = Score::select("*", DB::raw("MAX(score) as max") 
    ->groupBy('user_id') 
    ->orderBy('max', 'desc') 
    ->limit(10) 
    ->get(); 
+0

這將返回每個用戶的所有分數的總和,但只有每個用戶的最高分數是相關的。 –

+1

我編輯了我的答案,檢查了這一點@Slence – yudijohn

0

試試這個:(查詢生成器)

語法:

DB::table('name')->orderBy('column')->groupBy('column')->get(); 

修改查詢:

$results = DB::table('score') 
    ->orderBy('score', 'desc') 
    ->groupBy('user_id') 
    ->limit(10) 
    ->get(); 

希望這有幫助。

0

- 我不知道很好的QueryBuilder但此查詢解決問題

select top 10 * 
from 
(select userID, max(score) score from yourTable group by userID) K 
order by score desc 
+1

問題是關於如何使用querybuilder來做到這一點。 – jmattheis

+0

感謝洛奇,我不知道QueryBuilder,但我編輯我的答案,我希望不要搞砸 –

+0

然後,你不應該回答這個問題,當你不完全知道如何使用querybuilder(: – jmattheis