Получить позицию в рейтинге средствами MySQL

  • Автор темы Автор темы Heex
  • Дата начала Дата начала

Heex

Новичок
Получить позицию в рейтинге средствами MySQL

Есть таблица с пользователями. Есть поле с количеством очков (баллов, не важно). Как вывести топ 10, к примеру, понятно. Но как мне получить позицию в общем рейтинге, зная только ID пользователя? Поломал голову думавши. Реализовал пока средствами PHP, но это скорей всего не правильно, потому как я вынужден запросить весь список, и уже его потом обрабатывать. А если пользователей ОЧЕНЬ много? Можно ли получить позицию в рейтинге только средствами мускула или близко к тому?
 
позиция - это что? количество строк до строки с определённым количеством баллов?
 
сделать выборку только id(для уменьшения времени запроса) всех пользователей, отсортированных по кол-ву балов.

затем в цикле сравнвать id с твоим id, и параллельно инкрементировать счетчик.

как только пользователь найден, делаешь break и выводишь счетчик.
 
Выбрать по ID пользователя его кол-во баллов. Выбрать кол-во пользователей, у которых кол-во баллов больше.
 
это я уже сделал =) но несколько сот тысяч (или больше) ID обрабатывать скриптом... есть еще варианты?

-~{}~ 11.08.05 10:48:

Бресь Сергей
Это уже ближе к теме. Но если пользователь почти в самом хвосте? Тогда такой шаг не имеет смысла... (А таким пользователем является любой только что начавший участие)
 
Ну выбери общее кол-во пользователей и выбирай кол-во пользователей, у которых кол-во баллов меньше.
А это что - разные по трудоёмкости запросы разве?
 
>> если пользователь почти в самом хвосте?
>> Тогда такой шаг не имеет смысла
Разве в этом случае время выполнения предложенного мною запроса "выбрать кол-во пользователей, у которых кол-во баллов больше" существенно отличается от "выбрать кол-во пользователей, у которых кол-во баллов меньше"?
Если да, - то можно считать, на каком месте он с конца и, узнав общее кол-во польз. ("выбери общее кол-во пользователей"), пересчитать.
 
если пользователей много, то сделай temporary table, где первичым ключем поставь автоинсрементное поле.. потом добавляй в ее юзера и кол-во баллов с учетом сортировки.. запрос insert .. select..... и вот позиция будет твой автоикрементый номер.. три запроса всего.. и все средствами мускула
 
ну заранее не известно же в конце он или нет.. в том и фишка
и понять это можно только поняв его место в списке. а это и есть задача =)))))

-~{}~ 11.08.05 11:04:

clevel
вот об этом я думал. тогда уже вопрос: по времени-то что быстрей получится, делать временную таблицу или на php обрабатывать... И еще запросов то может быть несколько одновременно от разных пользователей, это сколько временных таблиц одновременно будет?
 
1.мускул всяко быстрее будет
2.временная таблица под каждого юзера делается.. это заботы мускула..
 
clevel
Да я просто не работал со временными, ща вычитываю в мануале, чот не вотру никак условия создания использования и удаления...
 
что за бред?
что за временная таблица всплыла?

-~{}~ 11.08.05 11:20:

возвращаемся назад, к идиотской фразе, с которой обсуждение пошло вкось
Тогда такой шаг не имеет смысла...
С ЧЕГО ТЫВЗЯЛ ЭТОТ БРЕД?
Почему не имеет смысла?
Обосновывай.

И вообще - заведи себе привычку - если ты берёшься высказывать какие-либо "умо"заключения, то срназу же, без пинка, приводи и основания, на которых ты сделал такой вывод.
Чтобы тебе объяснили, в каом месте ты ошибся
 
Фанат, прими успокоительное. И поучись у clevel конструктиву. Ничего личного.
Тема пожалуй закрыта.

PS Всем спасибо за советы
 
Heex
1. Запроси число баллов у юзера с данным id
2. Запроси count юзеров с числом баллов меньшим, чем у юзера с данным id
 
это ему уже говорили
но для него оказалось слишком сложно =)))
 
Сверху