我有一个排行榜,用于显示来自mySQl数据库的PHP地图中的排名最高的排名;
SELECT name, time, MAX(score) as max_score
FROM leaderboards
WHERE name != '' AND hidden=0 AND map='" .$currMap. "' AND score > 0
GROUP BY name
ORDER BY score DESC, time ASC LIMIT ".($get_page*10).", 10
我正在分页显示网站上显示的结果。
那里有好几个分数很高的人。他们的记录不会显示在清单上的位置。取而代之的是,他们在最低分的POSITION中排名靠前,但在VALUE时却最高。因此它不能正确地对其进行排序。
有什么建议吗?
它并没有拉高与该分数相关的时间。它正在拉任意记录。您的查询使用的是MySQL扩展名,其中select
(time
)中有一个不在中的列group by
。正如文档中*明确指出的那样,您可以从不确定的行中获取值。
substring_index()
/group_concat()
技巧是获得所需内容的一种方法:
SELECT name,
SUBSTRING_INDEX(GROUP_CONCAT(time ORDER BY score DESC), ',', 1) as TimeAtMaxScore,
MAX(score) as max_score
FROM leaderboards
WHERE name <> '' AND hidden = 0 AND map='" .$currMap. "' AND score > 0
GROUP BY name
ORDER BY score DESC, time ASC LIMIT ".($get_page*10).", 10;
(请注意:我使用了5.6版的文档,因为它更清楚地说明了发生的情况。5.7版可以更好地解释什么是功能依赖项,这是此扩展的基础。ANSI标准确实允许在在某些情况下。)
编辑:
您在中有相同的问题order by
。你可以做:
ORDER BY max_score DESC, TimeAtMaxScore ASC
LIMIT . . .
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句