我有一个MySQL数据库,其中包含很多高分数量的游戏。我希望得到“个人最佳”条目,其中包含最高分数。
我找到了一个我认为有效的解决方案,直到我的数据库中有更多名称,然后它返回完全不同的结果。
到目前为止我的代码:
SELECT name, score, date, version, mode, custom
FROM highscore
WHERE score =
(SELECT MAX(score)
FROM highscore
WHERE name = 'jonte' && gamename = 'game1')
对于很多值,这实际上会返回正确的值:
JONTE 240 2014-04-28 02:52:33 1 0 2053
几百个条目都有效,有些条目名称不同。但是当我添加新条目并将名称换成'gabbes'时,对于新名称,我会获得多个条目的列表。我没有看到这里的逻辑,因为数据库中的条目似乎与数据中的一些差异完全相同。
JONTE 176 2014-04-28 11:03:46 1 0 63
GABBES 176 2014-04-28 11:09:12 1 0 3087
以上有两个,但有时它也可能连续返回10-20个条目。
任何帮助?
答案 0 :(得分:1)
如果你想要每个人的高分(即最好的个人),你可以这样做......
SELECT name, max(score)
FROM highscore
WHERE gamename = 'game1'
GROUP BY name
或者,您可以这样做......
SELECT name, score, date, version, mode, custom
FROM highscore h1
WHERE score =
(SELECT MAX(score)
FROM highscore h2
WHERE name = h1.name && gamename = 'game1')
注意:在您的SQL中,您的子条款缺少name = h1.name
谓词。
但请注意,如果第二个选项多次记录相同的高分,则第二个选项会为同一个人提供多行。
答案 1 :(得分:0)
返回多个条目,因为多个条目具有相同的高分。您可以添加LIMIT 1
以仅获取一个条目。您可以使用ORDER BY
子句选择要返回的条目。