对于我的游戏,我试图包括一个在线评分系统。为了使我的分数系统工作,我想从我的数据库中得到一个分数列表。但是,由于我在mysql语句方面没有那么丰富的经验,所以我不知道如何为我想要的东西编写一个查询。
我的表的结构:http://prntscr.com/6z45bv
在我的查询中,我想返回表中的所有列“分数”。
SELECT * from scores只有php中的GET请求给出的阶段和级别。
WHERE stage = [number] AND level = [number]根据我的要求,我想从所有设备中获得最高的单分,从最高到最低。这些设备存储在"deviceid“列中。
从一个设备最高的分数是最高数量的“爆破点”(下降)与最高数量的“时间”(下降)。最高数量的爆破点是最重要的。
下面是我想要的结果的一个例子:
id, name, stage, level, blastpoints, time, badge, deviceid
5, "bob" 2 3 5 7123 true "asdakjhe"
1, "rick" 2 3 5 6321 false "3jkhasdl3"
8, "melissa" 2 3 4 8565 false "nlk43h2l"
2, "steven" 2 3 4 5678 true "342jhlad"
3, "freddy" 2 3 3 6721 false "1lk23jl1"
7, "hank" 2 3 2 5600 false "41asdg42"在本例中,我从第2阶段(第3级)检索分数,正如您可以看到的那样,爆破点正在下降,它只找到单个设备In的最高分数。
分数被设置为一个拥有特定设备in的球员可以上传他想要的分数。
我希望我提供了足够的信息,进一步的问题请评论。提前谢谢。
发布于 2015-05-05 09:55:00
在对Augwa的查询进行了一段时间的测试之后,我发现它不起作用。我自己做了一些尝试和错误,找到了正确的查询。
SELECT A.name,A.blastpoints,A.time,A.badge,A.deviceid
FROM (SELECT B.id,B.name,B.blastpoints,B.time,B.badge,B.deviceid
FROM scores B
WHERE B.stage = 0
AND B.level = 0
ORDER BY blastpoints DESC, time DESC) A
GROUP BY A.deviceid
ORDER BY A.blastpoints DESC, A.time DESC发布于 2015-04-28 12:47:58
在SQL中,可以使用ORDER BY对结果进行排序。在这种情况下,因为您需要:
ORDER BY blastpoints DESC, time DESC我们使用DESC进行降序。这样,最高的分数就会出现在顶端。您在ORDER BY中指定列名的顺序也很重要,这就是为什么我们在第一位和第二位指定爆破点的原因,正如您的示例所示。您也可以在ORDER BY上阅读更多内容。
把这一切结合在一起:
SELECT * FROM scores
WHERE stage = [number] AND level = [number]
ORDER BY blastpoints DESC, time DESC发布于 2015-04-28 12:51:55
你要做的就是按。按唯一性工作分组,所以有些字段您不能分组,因为它们只会导致问题。例如,id字段不能按组执行,但是可以得到它的min()、max()。
下面的查询将显示每个设备在每个级别和每个阶段的最高分数。
SELECT
stage,
level,
deviceid,
max(blastpoints) score
FROM
scores
GROUP BY
stage,
level
deviceid
ORDER BY
level ASC,
stage ASC,
score DESC,
deviceid此查询还应允许您考虑时间。
SELECT
min(s.id) id,
s.stage,
s.level,
hs.score,
s.time,
s.badge,
s.deviceid
FROM
scores s
INNER JOIN
(
SELECT
stage,
level,
deviceid,
max(blastpoints) score
FROM
scores
GROUP BY
stage,
level
deviceid
) hs ON
hs.deviceid = s.deviceid
AND hs.score = s.blastpoints
AND hs.stage = s.stage
AND hs.level = s.level
WHERE
s.stage = :stage
AND s.level = :level
GROUP BY
s.level,
s.stage,
hs.score,
s.time,
s.badge,
s.deviceid
ORDER BY
s.level ASC,
s.stage ASC,
hs.score DESC,
s.time,
s.deviceidhttps://stackoverflow.com/questions/29919836
复制相似问题