【发布时间】:2014-08-21 12:24:45
【问题描述】:
我有一个 MySQL 语句,它从用户表中提取前 15 个分数。
select @rownum:=@rownum+1 'rank', driverName, teamColour, totalScore, totalTime, didTyreChange from entries p, (SELECT @rownum:=0) r WHERE totalTime > 1000 and progress = 19 order by totalScore desc, totalTime asc limit 15
条件是,玩家必须完成所有问题(其中进度 = 19)并且最终时间必须超过 1 秒(totalTime > 1000)。该语句还将它们的排名作为变量返回 (@rownum:=@rownum+1 'rank')。
本次查询的结果如下
我现在想做的是将结果扩展为仅显示玩家的最高分。我查看了DISTINCT 和GROUP BY,但使用以下GROUP BY 语句得到这些结果
select @rownum:=@rownum+1 'rank', driverName, teamColour, totalScore, totalTime, didTyreChange from entries p, (SELECT @rownum:=0) r WHERE totalTime > 1000 and progress = 19 group by driverName order by totalScore desc, totalTime asc limit 15
DISTINCT 无处可去,因为我得到错误代码 1064。我都试过了
select @rownum:=@rownum+1 'rank', DISTINCT(driverName), teamColour, totalScore, totalTime, didTyreChange from entries p, (SELECT @rownum:=0) r WHERE totalTime > 1000 and progress = 19 order by totalScore desc, totalTime asc limit 15
和
select DISTINCT driverName, @rownum:=@rownum+1 'rank', teamColour, totalScore, totalTime, didTyreChange from entries p, (SELECT @rownum:=0) r WHERE totalTime > 1000 and progress = 19 order by totalScore desc, totalTime asc limit 15
两者都没有提供所需的结果。我想知道是否有一种简单的方法可以在语句中实现这一点,或者在 PHP 方面做到这一点。
想要的结果L
viper 1 9810
Maverick 2 25420
Racer roasty 3 28850
.. .
... 15
换句话说,任何用户都不应该出现在结果中两次,只为每个用户显示最快的 totalTime。
在此处精简 SQLFiddle http://sqlfiddle.com/#!2/36d3dc/7(已达到 8000 个字符限制)。
【问题讨论】:
-
你能正确解释想要的结果吗?
-
当然,问题已更新
-
兄弟你的解释还是很混乱。请详细说明
-
可以查询发群吗?