首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从一定的阶段和水平获得分数的列表

从一定的阶段和水平获得分数的列表
EN

Stack Overflow用户
提问于 2015-04-28 12:42:08
回答 3查看 66关注 0票数 0

对于我的游戏,我试图包括一个在线评分系统。为了使我的分数系统工作,我想从我的数据库中得到一个分数列表。但是,由于我在mysql语句方面没有那么丰富的经验,所以我不知道如何为我想要的东西编写一个查询。

我的表的结构:http://prntscr.com/6z45bv

在我的查询中,我想返回表中的所有列“分数”。

代码语言:javascript
复制
    SELECT * from scores

只有php中的GET请求给出的阶段和级别。

代码语言:javascript
复制
    WHERE stage = [number] AND level = [number]

根据我的要求,我想从所有设备中获得最高的单分,从最高到最低。这些设备存储在"deviceid“列中。

从一个设备最高的分数是最高数量的“爆破点”(下降)与最高数量的“时间”(下降)。最高数量的爆破点是最重要的。

下面是我想要的结果的一个例子:

代码语言:javascript
复制
    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的球员可以上传他想要的分数。

我希望我提供了足够的信息,进一步的问题请评论。提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-05 09:55:00

在对Augwa的查询进行了一段时间的测试之后,我发现它不起作用。我自己做了一些尝试和错误,找到了正确的查询。

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2015-04-28 12:47:58

在SQL中,可以使用ORDER BY对结果进行排序。在这种情况下,因为您需要:

代码语言:javascript
复制
ORDER BY blastpoints DESC, time DESC

我们使用DESC进行降序。这样,最高的分数就会出现在顶端。您在ORDER BY中指定列名的顺序也很重要,这就是为什么我们在第一位和第二位指定爆破点的原因,正如您的示例所示。您也可以在ORDER BY上阅读更多内容。

把这一切结合在一起:

代码语言:javascript
复制
SELECT * FROM scores
WHERE stage = [number] AND level = [number]
ORDER BY blastpoints DESC, time DESC
票数 2
EN

Stack Overflow用户

发布于 2015-04-28 12:51:55

你要做的就是按。按唯一性工作分组,所以有些字段您不能分组,因为它们只会导致问题。例如,id字段不能按组执行,但是可以得到它的min()、max()。

下面的查询将显示每个设备在每个级别和每个阶段的最高分数。

代码语言:javascript
复制
SELECT
    stage,
    level,
    deviceid,
    max(blastpoints) score
FROM
    scores
GROUP BY
    stage,
    level
    deviceid
ORDER BY
    level ASC,
    stage ASC,
    score DESC,
    deviceid

此查询还应允许您考虑时间。

代码语言:javascript
复制
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.deviceid
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29919836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档