2017-06-19 89 views
0

我試圖獲得前五名玩家,我使用join來獲取personId上的每個玩家信息庫,但是我的查詢返回重複數據。我無法弄清楚它爲什麼重複記錄,任何幫助都會非常受歡迎。由於Laravel加入返回重複數據

DB::table('person_competition_statistics as pcs') 
        ->where('pcs.competitionId', $competitionId) 
        ->where('pcs.teamId', $teamId) 
        ->orderBy('pcs.sStealsAverage', 'desc') 
        ->rightJoin('players as player', 'pcs.personId', '=', 'player.personId') 
        ->select(['pcs.personId', 'pcs.sStealsAverage', 'player.firstName', 'player.familyName', 'player.playingPosition', 'player.image_thumb']) 
        ->take(5) 
        ->get(); 

下面是結果

#items: array:5 [▼ 
     0 => {#444 ▼ 
     +"personId": 29872 
     +"sStealsAverage": 1.24 
     +"firstName": "Rhys" 
     +"familyName": "" 
     +"playingPosition": "" 
     +"image_thumb": "" 
     } 
     1 => {#438 ▼ 
     +"personId": 29872 
     +"sStealsAverage": 1.24 
     +"firstName": "Rhys" 
     +"familyName": "" 
     +"playingPosition": "" 
     +"image_thumb": "" 
     } 
     2 => {#439 ▼ 
     +"personId": 29872 
     +"sStealsAverage": 1.24 
     +"firstName": "Rhys" 
     +"familyName": "" 
     +"playingPosition": "GRD" 
     +"image_thumb": "" 
     } 
     3 => {#441 ▼ 
     +"personId": 29872 
     +"sStealsAverage": 1.24 
     +"firstName": "Rhys" 
     +"familyName": "" 
     +"playingPosition": "GRD" 
     +"image_thumb": "" 
     } 
     4 => {#435 ▼ 
     +"personId": 29872 
     +"sStealsAverage": 1.24 
     +"firstName": "Rhys" 
     +"familyName": "" 
     +"playingPosition": "GRD" 
     +"image_thumb": "" 
     } 
+0

添加'groupBy'。 –

+0

添加一個獨特的並刪除'playingPosition',否則你將仍然有重複。 –

+0

您可以通過 –

回答

0

我用獨特返回獨特PERSONID和array_slice得到前5名,下面是我的代碼。

$spg = DB::table('person_competition_statistics as pcs') 
        ->where('pcs.competitionId', $competitionId) 
        ->where('pcs.teamId', $teamId) 
        ->orderBy('pcs.sStealsAverage', 'desc') 
        ->join('players as player', 'pcs.personId', '=', 'player.personId') 
        ->select(['pcs.personId', 'pcs.sStealsAverage', 'player.firstName', 'player.familyName', 'player.playingPosition', 'player.image_thumb']) 
        ->get(); 

$spg = $spg->unique('personId'); 
$spg = array_slice($spg->values()->all(), 0, 5, true); 
0

試試這個使用原始SQL:

$sql = " SELECT t.personId, t.sStealsAverage, 
     player.firstName, player.familyName, 
     player.playingPosition, player.image_thumb 
    FROM 
    (
     SELECT pcs.personId, pcs.sStealsAverage 
     FROM person_competition_statistics AS pcs 
     WHERE pcs.competitionId = $competitionId 
     AND pcs.teamId = $teamId 
     ORDER BY pcs.sStealsAverage DESC 
     LIMIT 5 
) t 
    LEFT players AS player ON (t.personId = player.personId)"; 
    $result = DB::select($sql); 
+0

仍然不工作,它會返回重複的數據@NazmulHasan – PenAndPapers

+0

我已經更新了我的答案。請立即檢查 –