Php 获取某个阶段和级别的分数列表

Php 获取某个阶段和级别的分数列表,php,mysql,Php,Mysql,对于我的游戏,我试图包括一个在线评分系统。 为了让我的分数系统正常工作,我想从我的数据库中获取一份分数列表。 但由于我对mysql语句没有太多经验,所以我不知道如何为我想要的内容编写查询 我的表的结构: 在我的查询中,我想返回表“scores”中的所有列 在php中,只有GET请求给出的阶段和级别 WHERE stage = [number] AND level = [number] 根据我的要求,我想从所有设备中获得从最高到最低的最高单分数。设备存储在“deviceid”列中 设备的

对于我的游戏,我试图包括一个在线评分系统。 为了让我的分数系统正常工作,我想从我的数据库中获取一份分数列表。 但由于我对mysql语句没有太多经验,所以我不知道如何为我想要的内容编写查询

我的表的结构:

在我的查询中,我想返回表“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级的分数。正如您所看到的,爆炸点正在下降,它只找到单个deviceid的最高分数

分数设置为具有特定设备ID的玩家可以在表中上传任意多的分数


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

在SQL中,您可以使用
排序依据
对结果进行排序。在这种情况下,由于您需要:

ORDER BY blastpoints DESC, time DESC
我们使用
DESC
进行降序。这样,最高分数出现在顶部。按照的顺序指定列名的顺序也很重要,这就是为什么我们会按照您的示例,首先指定爆炸点,然后指定时间点。你也可以读更多的

总而言之:

SELECT * FROM scores
WHERE stage = [number] AND level = [number]
ORDER BY blastpoints DESC, time DESC

在SQL中,您可以使用
orderby
对结果进行排序。在这种情况下,由于您需要:

ORDER BY blastpoints DESC, time DESC
我们使用
DESC
进行降序。这样,最高分数出现在顶部。按照的顺序指定列名的顺序也很重要,这就是为什么我们会按照您的示例,首先指定爆炸点,然后指定时间点。你也可以读更多的

总而言之:

SELECT * FROM scores
WHERE stage = [number] AND level = [number]
ORDER BY blastpoints DESC, time DESC

在SQL中,您可以使用
orderby
对结果进行排序。在这种情况下,由于您需要:

ORDER BY blastpoints DESC, time DESC
我们使用
DESC
进行降序。这样,最高分数出现在顶部。按照的顺序指定列名的顺序也很重要,这就是为什么我们会按照您的示例,首先指定爆炸点,然后指定时间点。你也可以读更多的

总而言之:

SELECT * FROM scores
WHERE stage = [number] AND level = [number]
ORDER BY blastpoints DESC, time DESC

在SQL中,您可以使用
orderby
对结果进行排序。在这种情况下,由于您需要:

ORDER BY blastpoints DESC, time DESC
我们使用
DESC
进行降序。这样,最高分数出现在顶部。按照的顺序指定列名的顺序也很重要,这就是为什么我们会按照您的示例,首先指定爆炸点,然后指定时间点。你也可以读更多的

总而言之:

SELECT * FROM scores
WHERE stage = [number] AND level = [number]
ORDER BY blastpoints DESC, time DESC

你需要做的是分组。Group by处理唯一性,因此某些字段不能按其分组,因为它们只会导致问题。例如,id字段不能作为分组依据,但可以获取其最小值(),最大值()

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

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.deviceid

你需要做的是分组。Group by处理唯一性,因此某些字段不能按其分组,因为它们只会导致问题。例如,id字段不能作为分组依据,但可以获取其最小值(),最大值()

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

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.deviceid

你需要做的是分组。Group by处理唯一性,因此某些字段不能按其分组,因为它们只会导致问题。例如,id字段不能作为分组依据,但可以获取其最小值(),最大值()

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

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.deviceid

你需要做的是分组。Group by处理唯一性,因此某些字段不能按其分组,因为它们只会导致问题。例如,id字段不能作为分组依据,但可以获取其最小值(),最大值()

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

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.deviceid

在测试了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

在测试了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

在测试了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

在测试了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

如果你喜欢,考虑下面简单的两步行动:1。如果您还没有这样做,请提供适当的DDL(和/或SQLFIDLE),以便我们可以更轻松地复制问题。2.如果你还没有这样做,请提供一个与步骤1中提供的信息相对应的期望结果集。你能链接我这个例子吗?如果你愿意,考虑下面这个简单的两步过程:1。如果您还没有这样做,请提供适当的DDL(和/或SQLFIDLE),以便我们可以更轻松地复制问题。2.如果您还没有这样做,请提供一个与步骤1中提供的信息相对应的期望结果集。您可以链接我这个例子吗?如果您愿意,请考虑以下内容: