我确实为使用PHP的Android游戏编写了一个Web服务。该查询用于计算用户的排名如下:
$rank = mysqli_fetch_row(mysqli_query($db, "SELECT FIND_IN_SET(`score`, (SELECT GROUP_CONCAT(`score` ORDER BY `score` DESC) FROM `scores`)) AS `rank` FROM `scores` WHERE `user_id` = '{$user_id}'"));
那么,问题是什么?假设user_a
提交他的分数(例如1000)并且$rank
等于1,那么如果user_b
提交的分数与user_a
相同,则$rank
将是再次1。我不希望这样,在得分相等的情况下,第一个用户必须具有更高的等级。所以我为submit_date
时间戳添加了一个新的整数列到scores
表,并试图操纵查询,不幸的是因为我不熟练使用SQL,我的努力失败了。
更新:我不会将排名本身存储在数据库中。 scores
表结构如下所示:
`_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`score` int(11) NOT NULL,
`submit_date` int(11) NOT NULL
user_id
是唯一的。如果用户之前未提交过他的分数,则会创建新记录。否则他的记录将被更新(如果新分数高于旧分数)。
我该怎么办?
答案 0 :(得分:1)
If two user with same score and do display old user at top.
you can add on update date ie when the score is update the current date time will be inserted on that field.
then when you invoke record from the data base retrieve according to rank and update date
like:
SELECT * FROM test ORDER BY rank DESC, update_date ASC
from this you can get two field can order at a time