Система рекордов из моей игры на iphone - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть этот цикл в 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 ]

1 голос
/ 29 февраля 2012

Вот как запросить в базе данных рейтинг игрока 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 .

1 голос
/ 29 февраля 2012

Одним из вариантов является написание функции, которая рассчитывает рейтинг пользователя на основе всех других оценок и возвращает его.Затем, вызывая его, когда пользователь хочет увидеть свое звание.

Насколько я знаю, в MMORPG-играх (например) есть поле rank в их БД для каждого игрока, и они используют ежедневно или ежечасно.cron-job для обновления этого ранга.Поэтому вместо того, чтобы запускать функцию «рассчитать ранг» каждый раз, когда игрок просто хочет увидеть свой ранг, вам просто нужно получить значение поля.

РЕДАКТИРОВАТЬ: код функции (не забудьте добавить поле 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 для этого файла.(или обратитесь за поддержкой к вашему хостинг-провайдеру).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...