![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| neoks |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 425 Регистрация: 5.7.2010 Репутация: нет Всего: 1 |
Всем доброго суток, возникла вот такая вот задачка.
Есть таблица пользователей и нужно показать десятку пользователей в том числе и меня самого, думаю всем знаком вам рейтинг как это делается в играх) Вывести по рейтингу не проблема, но так и не могу найти ответа как узнать позицию в рейтинге и вывести результат моей позиции. Как вариант сделать так 1. Найти свою запись по id и узнать свой рейтинг 2. Подсчитать строки где рейтинг больше моего, таким образом я узнаю свою позицию 3. Выбрать еще 9 строк где рейтинг ниже моего. Получится 3 запроса, можно ли как-то разумно это сделать ? |
|||
|
||||
| ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Более разумного варианта, чем 4 запроса, я пока не вижу. Можно попытаться объединять запросы, но смысла в этом нет.
узнать свой рейтинг по ID можно было бы так
Нужно, однако, получить и собственный рейтинг, не только место. Так что отдельных запроса будет лучше. вывести по X=3 записей "перед игроком" и "после" можно так
7=3*2+1 Хотя выводить список в таком виде не особенно удобно, особенно в конце-начале рейтингового списка и при одинаковых значениях ранга. Проще и удобнее без всякого юнита выполнить пару запросов на меньше и больше. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||
|
|||||
| neoks |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 425 Регистрация: 5.7.2010 Репутация: нет Всего: 1 |
ksnk Спасибо, так и буду делать, 3 так 3)
|
|||
|
||||
| ksnk |
|
||||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
А какая задача решается-то? Зачем выводить игроков "ниже" по рейтингу и не выводит тех, кто "сверху"?
Впрочем, насчет 4-х запросов, возможно я не прав. Получить информацию и рейтинг одним запросом можно. Например так
Получается сразу правильный номер, с 1-цы, а не с 0-я как в моем предыдущем запросе. И, на первый взгляд, не особенно неоптимальный. Тестировать нужно... Вывести по 3 сверху-снизу "рядомрасположенных" игроков, вокруг игрока с рангом 4 со скилом 236, тоже можно "одним" запросом.
Выводится сразу с местом. Это сообщение отредактировал(а) ksnk - 24.11.2013, 14:06 -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
||||
|
|||||
| neoks |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 425 Регистрация: 5.7.2010 Репутация: нет Всего: 1 |
ksnk как всегда выручил
|
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Это как это?
Сначала считаем свое положение и ранг о своему ID. Потом подставляем свое место и ранг в запрос. Для 2-х записей не может получится 4-е место. Только первое и второе. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| neoks |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 425 Регистрация: 5.7.2010 Репутация: нет Всего: 1 |
Не совсем понял что за скилл и ранг, я сортирую по очкам, полный запрос выглядит так
В итоге я на четвертой позиции вместо второй) |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
@rank := 4 - вот здесь устанавливается ранг (позиция) игрока со score == $user['score']
Чтобы узнать свою "позицию", нужно выполнить
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| neoks |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 425 Регистрация: 5.7.2010 Репутация: нет Всего: 1 |
ksnk Спасибо, все работает) я просто сначала не понял что значит 4)) работает отлично все, еще раз спасибо, выручил как всегда
|
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |