我在PHP中使用这个循环从MySQL表中选择我游戏中的所有分数。
我的查询是:
$sql = "SELECT * FROM $table WHERE ";
switch($type) {
case "global":
$sql .= "1 ";
break;
case "device":
$sql .= "udid = '$udid' ";
break;
case "name":
$sql .= "name = '$name' ";
break;
}
$sql .= "ORDER BY $sort ";
$sql .= "LIMIT $offset,$count ";
$result = mysql_query($sql,$conn);
udid
是唯一标识符。循环:
while ($row = mysql_fetch_object($result)) {
echo '<tr>
<td>
'.$rank.'
</td>
<td>
'.$row->name.'
</td>
<td>
'.$row->score.'
</td>
<td>
'.$row->udid.'
</td>
</tr>';
$rank++;
}
我的问题很简单,所以一个人可以在游戏中看到他的等级。
“如何从循环之外的udid
中选择排名”。
或许创建一个新的查询,从udid
中选择排名,或者在循环中设置变量?
答案 0 :(得分:1)
一个选项是编写一个函数,根据所有其他分数计算用户的排名并返回它。 然后,当用户想要查看他的排名时调用它。
据我所知,MMORPG游戏(例如)在每个数据库中都有一个rank
字段
玩家和他们使用每日或每小时的cron-job来更新该等级。
因此,不是每次玩家都运行'计算 - 排名'功能
只想看看他的排名,你只需要获取该领域的价值。
EDIT:该函数的代码(不要忘记将rank
字段添加到数据库表中)
档案:
cronjob_update_rank.php:
require 'config.php'; //Or whatever contains your config and DB connection.
$rank = 1; //The best player ranked as 1
$getMembers = mysql_query("SELECT id FROM members ORDER BY `score` DESC");
while($mem = mysql_fetch_array($getMembers))
{
mysql_query("UPDATE members SET rank='$rank' WHERE id='{$mem['id']}'");
$rank++;
}
请注意,这只是一个示例代码,您需要根据自己的需要进行自定义。
使用服务器面板在该文件上创建每日cronjob。 (或要求您的托管服务提供商支持)。
答案 1 :(得分:1)
以下是如何在数据库中查询玩家udid 1
的排名:
SELECT COUNT(*) AS rank
FROM tablename
WHERE score > (SELECT score FROM tablename WHERE udid = 1)
我假设得分越高越好,你只为每位玩家存储得分最高。
使用score
和udid
的索引,这应该非常快。
查询的作用是计算得分高于所选用户的用户数。
如果分数越低越好,只需将其更改为:
SELECT COUNT(*) AS rank
FROM tablename
WHERE score < (SELECT score FROM tablename WHERE udid = 1)
分数较低的玩家数量。
阅读所有关于MySQL indexes。
的信息