MySQL查询高分排行榜存在问题
我有一个MySQL游戏高分表,显示了一年中过去每一天的每日高分。现在我正在做一个PHP for循环,并每天进行一个单独的查询,但是表变得太大了,所以我想把它压缩成一个简单的MySQL语句 这是我现在的新查询。提交的日期是一个时间戳:MySQL查询高分排行榜存在问题,sql,mysql,aggregate-functions,Sql,Mysql,Aggregate Functions,我有一个MySQL游戏高分表,显示了一年中过去每一天的每日高分。现在我正在做一个PHP for循环,并每天进行一个单独的查询,但是表变得太大了,所以我想把它压缩成一个简单的MySQL语句 这是我现在的新查询。提交的日期是一个时间戳: SELECT date(date_submitted) as subDate, name, score FROM highScores WHERE date_submitted > "2009-07-16" GROUP BY subDate ORDER BY
SELECT date(date_submitted) as subDate, name, score FROM highScores WHERE date_submitted > "2009-07-16" GROUP BY subDate ORDER BY subDate DESC, score DESC LIMIT 10;
输出:
+------------+------------+--------+
| subDate | name | score |
+------------+------------+--------+
| 2010-07-18 | krissy | 959976 |
| 2010-07-10 | claire | 260261 |
| 2010-07-05 | krissy | 771416 |
| 2010-06-19 | krissy | 698031 |
| 2010-06-18 | otli | 264898 |
| 2010-06-15 | robbie | 82303 |
| 2010-06-01 | dad | 480469 |
| 2010-05-29 | vicente | 124149 |
| 2010-05-27 | dad | 564007 |
| 2010-05-26 | caleb | 502623 |
+------------+------------+--------+
+--------+--------+---------------------+
| name | score | date_submitted |
+--------+--------+---------------------+
| john | 304095 | 2010-06-15 22:58:02 |
| april | 247126 | 2010-06-15 21:25:31 |
| orli | 166021 | 2010-06-15 21:25:31 |
| robbie | 82303 | 2010-06-15 11:38:39 |
+--------+--------+---------------------+
我的问题是,当它按子日期分组时,它对当天最早的时间戳的得分最高,正如您在下一个查询中所看到的:
SELECT name, score, date_submitted FROM highScores WHERE date(date_submitted)='2010-06-15' GROUP BY name ORDER BY score DESC;
输出:
+------------+------------+--------+
| subDate | name | score |
+------------+------------+--------+
| 2010-07-18 | krissy | 959976 |
| 2010-07-10 | claire | 260261 |
| 2010-07-05 | krissy | 771416 |
| 2010-06-19 | krissy | 698031 |
| 2010-06-18 | otli | 264898 |
| 2010-06-15 | robbie | 82303 |
| 2010-06-01 | dad | 480469 |
| 2010-05-29 | vicente | 124149 |
| 2010-05-27 | dad | 564007 |
| 2010-05-26 | caleb | 502623 |
+------------+------------+--------+
+--------+--------+---------------------+
| name | score | date_submitted |
+--------+--------+---------------------+
| john | 304095 | 2010-06-15 22:58:02 |
| april | 247126 | 2010-06-15 21:25:31 |
| orli | 166021 | 2010-06-15 21:25:31 |
| robbie | 82303 | 2010-06-15 11:38:39 |
+--------+--------+---------------------+
正如你所看到的,可怜的约翰应该成为2010-06-15年度的领导者。有人能帮忙吗?希望这是我忽略的真正简单的事情。在第一次查询中,我尝试在FROM部分之前使用maxscore,它给了我正确的分数,但没有保留名称
谢谢您的帮助。添加一个
ORDER BY userScore DESC
在第二个查询的末尾
SELECT userName, userScore, subDate FROM (
SELECT
userName,
userScrore,
DATE(submitDate) as subDate,
@rn := CASE WHEN @subDate = DATE(submitDate)
THEN @rn + 1
ELSE 1
END AS rn,
@subDate := DATE(submitDate)
FROM (SELECT @subDate := NULL) vars, highScores
ORDER BY submitDate, userScore DESC
) deriv
WHERE rn=1;
另请参见另一个问题的答案I在第二个查询结束时按分数说明排序。因此,该查询排序正确。我只是尝试在第一个查询中将score DESC更改为score ASC,只是想看看它是否确认了订单的第二部分,并且在第一个查询中给了我完全相同的输出,这很奇怪。看起来它纠正了第二个输出,除非我弄错了。是的,它现在对第二个输出进行排序。它显示john是当天的最高分数,但仍然在第一个查询中,我是否得分ASC或得分DESC并不重要。我想我可能需要做一些复杂的事情,比如第二个答案。嘿,谢谢。这超出了我的MySQL经验,但我想我已经开始理解它了。但是,当我从MySQL命令行运行此命令时:选择name、score、subDate from SELECT name、score、DATEdate_subDate、@rn。。。。。等我得到这个错误:错误1064 42000:您的SQL语法有错误;查看与MySQL服务器版本相对应的手册,以了解第2行“选择名称、分数、日期提交为”附近使用的正确语法。我只是尝试了一次,并重写它,而不是复制粘贴,它的工作!我得到的错误是一些额外的空白行或复制它的东西。