我的iphone游戏的高分系统

时间:2012-02-28 21:32:21

标签: php iphone mysql sql

我在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中选择排名,或者在循环中设置变量?

2 个答案:

答案 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)

我假设得分越高越好,你只为每位玩家存储得分最高。

使用scoreudid的索引,这应该非常快。

查询的作用是计算得分高于所选用户的用户数。

如果分数越低越好,只需将其更改为:

SELECT COUNT(*) AS rank
FROM tablename
WHERE score < (SELECT score FROM tablename WHERE udid = 1)

分数较低的玩家数量。

阅读所有关于MySQL indexes

的信息
相关问题