Php Laravel Join返回重复的数据
我正在尝试获取前五名玩家,我使用join获取每个玩家基于personId的信息,但我的查询返回重复的数据。我不明白为什么它会复制记录,任何帮助都是非常感谢的。谢谢Php Laravel Join返回重复的数据,php,mysql,laravel,laravel-5,eloquent,Php,Mysql,Laravel,Laravel 5,Eloquent,我正在尝试获取前五名玩家,我使用join获取每个玩家基于personId的信息,但我的查询返回重复的数据。我不明白为什么它会复制记录,任何帮助都是非常感谢的。谢谢 DB::table('person_competition_statistics as pcs') ->where('pcs.competitionId', $competitionId) ->where('pcs.teamId', $team
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": ""
}
使用原始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);
我使用unique返回unique personId,并使用array\u 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);
我认为你应该使用groupBy,使用你唯一的Id,而不使用你的表名,比如
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)
->groupBy('personId')
->get();
添加一个
groupBy
。添加一个不同的组并删除playingPosition
,否则您仍然会有重复的组。您可以添加组by@SougataBose我尝试添加groupBy('pcs.personId'),但返回一个错误SQLSTATE[42000]:语法错误或访问冲突:SELECT列表的1055表达式#2不在GROUP BY子句中,并且包含未聚合的列“db_nblmothership.pcs.sStealsAverage”,该列在功能上不依赖GROUP BY子句中的列;这与sql\u mode=only\u full\u组不兼容_by@NorbertvanNobelen你的解决方案有效,但我需要返回玩家PlayingPossiton仍然不起作用,它返回重复数据@NazmulHasan