You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:45:04