2017-12-16 11 views
1

おそらくこれを行う簡単な方法がありますが、しばらく考えて答えを見つけることができないようです。私は基本的に結果を制限しようとしていますが、限界を超えて進行する行が同じ場合は限界を超えます。Laravelの上限ですが、上限になると上限を返します

Name  Score 
John  5 
Mike  4 
Lucy  3 
Sara  3 
Thea  2 

私は結果を制限したい場合は、私のようなものだろう:例えばこれは私のトップ3の結果を得るだろうが、どのように私はまた、例えばデータからサラを(含まれるであろう

$topthree = Users::orderBy('score','desc')->limit(3)->get(); 

を)、彼女はまたトップ3の得点にあるので?

私が必要以上に戻ってフィルタリングを行うことを考えましたが、より良い方法があると思います。どんな助けもありがとう!

+0

をあなたが望むものは何ですか?このリストにsaraが欲しいなら、ここではトップ3のロジックだけがあります。ここに追加ロジックが必要です。 – Imran

+1

あなたは2つのステップでそれを行うことはできませんか? 1)3番目のスコアを取得する、2)すべてのユーザーにスコア> =を返す。 –

+0

'SELECT Name、Score FROM

WHERE Score> =(スコアを選択すると
ORDER BYスコアDESC) LIMIT 2,1); – Cyclonecode

答えて

1

2つのクエリを使用できます。

まず3位のスコアを取得:

$minScore = Users::orderBy('score','desc')->skip(2)->take(1)->value('score'); 

その後スコア少なくとも持つすべてのユーザーを取得取得:

$topthree = Users::orderBy('score','desc')->where('score', '>=', $minScore)->get(); 

もサブクエリで動作するかもしれない:

$minScoreQuery = Users::select('score')->orderBy('score','desc')->skip(2)->take(1); 

$topthree = Users::orderBy('score','desc') 
    ->where('score', '>=', $minScoreQuery) 
    ->get(); 
関連する問題