Создавая таблицы лидеров, как бы я показал рейтинг / положение? - PullRequest
1 голос
/ 17 августа 2011

Я создаю списки лидеров, которые будут отображать следующее: Ранг, Имя пользователя, Счет

В настоящее время у меня есть таблица, в которой будут отображаться Имя пользователя и Оценка из данных в таблице MySQL, мне просто интересно, какхотел бы я показать ранг для каждого пользователя, номер 1 - это пользователь с наивысшим баллом, затем нисходящий.

Спасибо!

Ответы [ 3 ]

1 голос
/ 17 августа 2011

Я рекомендую прочитать на PHP / MySQL .

Заголовок HTML: Откройте таблицу, создайте заголовки

<table>
    <tr>
        <td>Rank</td>
        <td>User</td>
        <td>Score</td>
    </tr>

PHP: Динамически генерировать строки для каждого пользователя

    <?php

        $result = mysql_query("SELECT user, score FROM leaderboard ORDER BY score DESC");
        $rank = 1;

        if (mysql_num_rows($result)) {
            while ($row = mysql_fetch_assoc($result)) {
                echo "<td>{$rank}</td>
                      <td>{$row['user']}</td>
                      <td>{$row['score']}</td>";

                $rank++;
            }
        }
    ?>

Нижний колонтитул HTML: необходимо закрыть таблицу

</table>
0 голосов
/ 17 августа 2011

Вам нужно 1) получить оценку записи, которую вы пытаетесь оценить 2) подсчитать количество записей с «лучшим» счетом («лучше» зависит от вашего типа игры. Баскетбол, чем выше балл, тем лучше. Гольф, чем меньше балл, тем лучше.)

Итак, что-то вроде

select records in order
for each record
    score = record.score
    rank = select count(*) + 1 from table where score_column is better than score
    display data
end for

Проблема в том, что выполнение подсчета (*) для любого значительного объема данных происходит медленно. Но вы можете видеть, что как только у вас есть ранг первых ДВУХ разных баллов, вы можете определить ранг оставшихся строк в вашем коде без запроса. Но помните: вам, вероятно, нужно учитывать связи.

0 голосов
/ 17 августа 2011

Вы можете сделать все это в SQL:

SET @row = 0;
SELECT
    @row := @row + 1 AS rank
    userName,
    score
FROM
    leaderboard
ORDER BY
    score DESC
...