SQL记录集令人困惑的结果

用户名

我有一个排行榜,用于显示来自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时却最高。因此它不能正确地对其进行排序。

有什么建议吗?

戈登·利诺夫(Gordon Linoff)

它并没有拉高与该分数相关的时间。它正在拉任意记录。您的查询使用的是MySQL扩展名,其中selecttime)中有一个不在中的列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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章