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

Heex

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

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

Фанат

oncle terrible
Команда форума
позиция - это что? количество строк до строки с определённым количеством баллов?
 

Sherman

Mephi
сделать выборку только id(для уменьшения времени запроса) всех пользователей, отсортированных по кол-ву балов.

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

как только пользователь найден, делаешь break и выводишь счетчик.
 

Сергей123

Новичок
Выбрать по ID пользователя его кол-во баллов. Выбрать кол-во пользователей, у которых кол-во баллов больше.
 

Heex

Новичок
это я уже сделал =) но несколько сот тысяч (или больше) ID обрабатывать скриптом... есть еще варианты?

-~{}~ 11.08.05 10:48:

Бресь Сергей
Это уже ближе к теме. Но если пользователь почти в самом хвосте? Тогда такой шаг не имеет смысла... (А таким пользователем является любой только что начавший участие)
 

Сергей123

Новичок
Ну выбери общее кол-во пользователей и выбирай кол-во пользователей, у которых кол-во баллов меньше.
А это что - разные по трудоёмкости запросы разве?
 

Сергей123

Новичок
>> если пользователь почти в самом хвосте?
>> Тогда такой шаг не имеет смысла
Разве в этом случае время выполнения предложенного мною запроса "выбрать кол-во пользователей, у которых кол-во баллов больше" существенно отличается от "выбрать кол-во пользователей, у которых кол-во баллов меньше"?
Если да, - то можно считать, на каком месте он с конца и, узнав общее кол-во польз. ("выбери общее кол-во пользователей"), пересчитать.
 

clevel

Новичок
если пользователей много, то сделай temporary table, где первичым ключем поставь автоинсрементное поле.. потом добавляй в ее юзера и кол-во баллов с учетом сортировки.. запрос insert .. select..... и вот позиция будет твой автоикрементый номер.. три запроса всего.. и все средствами мускула
 

Heex

Новичок
ну заранее не известно же в конце он или нет.. в том и фишка
и понять это можно только поняв его место в списке. а это и есть задача =)))))

-~{}~ 11.08.05 11:04:

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

clevel

Новичок
1.мускул всяко быстрее будет
2.временная таблица под каждого юзера делается.. это заботы мускула..
 

Heex

Новичок
clevel
Да я просто не работал со временными, ща вычитываю в мануале, чот не вотру никак условия создания использования и удаления...
 

Фанат

oncle terrible
Команда форума
что за бред?
что за временная таблица всплыла?

-~{}~ 11.08.05 11:20:

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

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

Heex

Новичок
Фанат, прими успокоительное. И поучись у clevel конструктиву. Ничего личного.
Тема пожалуй закрыта.

PS Всем спасибо за советы
 

tashkentchi

Новичок
Heex
1. Запроси число баллов у юзера с данным id
2. Запроси count юзеров с числом баллов меньшим, чем у юзера с данным id
 

Фанат

oncle terrible
Команда форума
это ему уже говорили
но для него оказалось слишком сложно =)))
 
Сверху