mySQL SELECT查询不再正常工作

时间:2015-10-17 22:16:02

标签: mysql sql

我有一个顶级列表,它只在列表中显示一次用户。我有一个mySQL查询,直到昨天才正常工作。我已将我的网站转移到另一台主机,现在此查询不像以前那样工作。

SELECT *
FROM
  (SELECT *
   FROM game_toplist
   ORDER BY point DESC) AS my_table_tmp
GROUP BY username
ORDER BY point DESC LIMIT 100

问题是这个查询没有返回最高分。它根据用户返回得分'最低的身份。以下是我的数据示例:

 id  username   point     date    gametime
1221  John       474  2015-10-04    253
1423  John       726  2015-10-04    386

因此,如果查询工作正常,它将返回第二行(726点)但不幸的是,它返回第一行(474点)。

我希望有人可以帮助我。

2 个答案:

答案 0 :(得分:1)

在与其他答案类似的查询中,我开始查询那些具有最高点,有序并限制在前100位的用户。从中,加入回到MATCHED用户的原始表并指向值。这应该只返回前100名用户的每人一条记录...例外情况是,如果一个用户有多个最高点值的记录...例如John 793和John 793,因为两个不同的记录存在不同的ID。 / p>

为了解决您的多个常见问题,我将查询嵌套了一层。内部查询得到前100名...然后加入到game_toplist然后使用MINIMUM" ID"有资格获得该用户最高点的游戏(如果场景中存在多个)。这最终再次重新加入到完整的game_toplist表中,但这次是在用户名和第一个具有最高点资格的游戏上。这应该可以解决每个人的重复问题。

if(tokens.length > 3) {
   tokens = line.split(":");
   hours =Integer.parseInt(tokens[3].trim());
   minutes =Integer.parseInt(tokens[4].trim());
}

答案 1 :(得分:0)

首先,您应该删除在子查询中不起作用的第一个order by point desc

你不需要内在选择既不是因为你没有改变或计算任何东西

除非您需要GROUP BY usernameMAX

等汇总功能,否则请删除COUNT

除非您在问题中遗漏了一些信息,否则这应该是您的查询。

SELECT * 
FROM game_toplist 
order by point desc limit 100";

但也许你想要这个

SELECT *
FROM game_toplist G
INNER JOIN (
                        SELECT username, Max(point) mp
                        FROM game_toplist 
                        GROUP BY username ) As maxP
ON G.username = maxP.username
AND G.point = maxP.mp
ORDER BY G.point DESC
LIMIT 100

这可能适用于mySQL,但这不是ANSI SQL标准

    SELECT  id,  username,   MAX(point) ,    date
    FROM game_toplist
    GROUP BY username
    ORDER BY point DESC
    LIMIT 100;