PHP开发中总分相等时按两列排序 能否仅通过SQL实现
结论
这个需求仅通过SQL就能实现,不需要额外在PHP层做排序处理。
问题原因
你当前的查询中totalTime的排序方向设置反了:你用了desc降序排序,所以相同积分的条目里,耗时更长的会排在前面。
修复方案
只需要把totalTime的排序方向改成asc升序即可,修改后的查询代码如下:
$getRanking = DB::table('users') ->select(DB::raw('totalTime ,sum(userPoints)+sum(extraPoints) as TotalPoints, id, name, email')) ->groupby('id','name', 'email','totalTime') ->orderBy('TotalPoints','desc') ->orderBy('totalTime','asc') ->limit(10) ->get();
说明
修改后SQL会先按总积分从高到低排序,积分相同的条目会自动按总耗时从短到长排序,直接返回符合预期的结果,相比PHP层二次排序性能更好,逻辑也更简洁。
内容的提问来源于stack exchange,提问作者Breno Sobral
相关产品推荐
相关产品推荐

