【问题标题】:Getting the top scores, but remove duplicate users (SQL)获得最高分,但删除重复用户 (SQL)
【发布时间】:2023-03-30 18:35:01
【问题描述】:

我正在开发一款基于时间的游戏(时间越短越好),并且我有一个排行榜,它将每个游戏都存储到 SQL 数据库中。

我想从数据库中获取前 15 个最低(最佳)时间,但只为每个用户显示一个输出,以便显示前 15 个用户的最佳时间,但我似乎无法在返回所有信息的同时执行此操作。

我使用的查询是:

SELECT * FROM `scores` WHERE size='$size' ORDER BY `time` ASC LIMIT 15

谢谢。

【问题讨论】:

标签: php mysql sql


【解决方案1】:

你似乎想要这样的东西:

select s.*
from scores s
where s.score = (select max(s2.score) from scores s2 where s2.userid = s.userid)
order by s.score asc
limit 15;

我不知道size 在您的示例查询中的用途。

【讨论】:

  • 这是一个棋盘游戏,所以我存储了棋盘的大小。
【解决方案2】:
SELECT * FROM (SELECT user,size,min(time) as time FROM scores
WHERE size = '10x10' 
GROUP BY user, size)
ORDER BY time
LIMIT 15

为每个用户选择最短时间并返回前 15 名用户的最短时间分数。

【讨论】:

  • ...min(time) 作为时间
【解决方案3】:

如果您使用user 列对数据进行分组,则可以使用MIN() 来隔离每个用户的最低/最佳时间。最后,您按BestTimeASC 排序(以便首先列出较小的数字)并使用LIMIT 截断结果集。

查询:

SELECT `user`, MIN(`time`) AS BestTime 
FROM `scores`
WHERE `size` = '10x10'
GROUP BY `user`
ORDER BY `BestTime`
LIMIT 15;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多