私は現在、自分のサイトのハイスコアでユーザーとそのランクを表示するページをPHPで作成しています。
ただし、他のフィールドとは異なり、意図したとおりに機能していないフィールドが1つあります。
これが私のテーブルです:
-- ----------------------------
-- 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の個人のハイスコアに移動すると、そのユーザーは全体で最高のoverallxpを持っているため、そのユーザーの正しい全体的なランキングが表示されます。ただし、userid28967またはuserid95848の個人的なハイスコアにアクセスすると、何らかの理由でそれらの全体的なランクはuserid14950と同じになります(おそらく、同じ全体的な結果を持つユーザーを考慮していないためです)。
私の質問は、2人(またはそれ以上)のユーザーが全体的に同じランクを共有している場合、重複したランクではなく、正しいランクが表示されるようにするにはどうすればよいですか?
以上です。
どんな助けでも大歓迎です:)
ありがとう、
マーク