MySQL高分 - 用户的个人排名:重复的条目导致错误的值

时间:2012-08-23 12:12:09

标签: php mysql

我目前正在使用PHP创建一个页面,该页面将在我网站的高分榜中显示用户及其排名。

但是,我有一个与其他字段不同的字段,并且无法按预期运行。

这是我的表:

-- ----------------------------
--  Table structure for `playerstats`
-- ----------------------------
DROP TABLE IF EXISTS `playerstats`;
CREATE TABLE `playerstats` (
  `uid` int(11) NOT NULL DEFAULT '0',
  `gamelevel` int(11) NOT NULL DEFAULT '0',
  `overall` int(11) NOT NULL DEFAULT '0',
  `overallxp` bigint(20) NOT NULL DEFAULT '0',
  KEY `uid` (`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

......以及一些示例数据:

INSERT INTO `playerstats` VALUES ('14950', '123', '1495', '129825211')
INSERT INTO `playerstats` VALUES ('28967', '124', '1495', '127168799')
INSERT INTO `playerstats` VALUES ('95848', '121', '1495', '108481173')

这是我的问题:

SELECT count(*) + 1 FROM (SELECT uid, overall, overallxp, gamelevel FROM playerstats GROUP BY playerstats.uid) AS x WHERE overall > (SELECT overall FROM playerstats WHERE uid = ". $userid .")"

...和$ userid是:

$userid = (int) $_GET['searched'];

现在,当我导航到userid14950的个人高分时,它会显示该用户的正确总排名,因为他们是整体排名最高的人。但是,当我访问userid28967或userid95848的个人高分时,由于某些原因,他们的总体排名与userid14950相同(很可能是因为我没有考虑具有相同整体结果的用户)。

我的问题是:如果两个(或更多)用户共享相同的整体,他们如何显示正确的排名,而不是重复的排名?

所以就是这样。
任何帮助非常感谢:)

谢谢,
标记

1 个答案:

答案 0 :(得分:1)

试试这个:

SET @rank = 0;
SELECT rank FROM (
    SELECT @rank:=@rank + 1 AS rank, uid FROM playerstats ORDER BY overall DESC, 
    overallxp  DESC
) as tmp WHERE uid = 14950

上述查询将返回用户14950的排名

此查询将列出所有用户及其排名

SET @rank=0;
SELECT rank, uid, overall, overallxp FROM (
SELECT @rank:=@rank + 1 AS rank, uid, overall, overallxp FROM playerstats ORDER BY overall DESC, overallxp DESC
) as tmp