2017-12-16 5 views
1

아마도이 작업을 수행하기위한 쉬운 방법이있을 수 있습니다. 그러나 잠시 동안 생각하고 검색하여 대답을 찾지 못하는 것 같습니다. 나는 기본적으로 결과를 제한하려고 시도하지만 제한을 넘는 진행 행이 동일하면 제한보다 더 많이 포함합니다. 나는 같은 것을 할 것입니다 결과를 제한하기를 원할 경우Laravel 한도이지만 상단에있는 경우 한도를 초과하여 반환하십시오.

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

:이 나에게 세 가지 결과를 얻을 것이다

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

을,하지만 어떻게 내가 또한 사라을 포함 할 것 (에서 예제 데이터 예를 들어,), 그녀는 또한 상위 3 점에 속해 있기 때문에?

필자는 필자가 필요로하는 것 이상을 반환하고 추가 필터링을하는 것을 고려해 봤지만 더 좋은 방법이 있다고 가정합니다. 어떤 도움을 주셔서 감사합니다!

+0

을 너는 무엇을 원하는가? 이 목록에 새라를 원한다면 상위 3 가지 논리 만 있으면됩니다. 그래서 여기에 추가적인 논리가 있어야합니다. – Imran

+1

두 단계만으로 진행할 수 없습니까? 1) 3 번째 점수를 얻고, 2) 모든 사용자에게 점수> =를 부여하십시오. –

+0

'SELECT Name, Score FROM

WHERE Score> = (선택 점수는
ORDER BY 점수 DESC) LIMIT 2,1); – Cyclonecode

답변

1

두 가지 쿼리를 사용해 볼 수 있습니다.

먼저 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(); 
관련 문제