1

我目前正在用 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 的个人高分时,它会显示该用户的正确总体排名,因为他们是总体总体 xp 最高的人。但是,当我访问 userid28967 或 userid95848 的个人高分时,由于某种原因,它们的总体排名与 userid14950 相同(很可能是因为我没有考虑到总体结果相同的用户)。

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

就是这样。
很感谢任何形式的帮助 :)

谢谢,
马克

4

1 回答 1

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

avove 查询将返回 user14950 的排名

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

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 
于 2012-08-23T12:48:40.253 回答