2017-06-19 94 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

我已经更新了我的答案。请立即检查 –