Можно ли получить номер определенной строки при сортировке в MySQL

Пример: у меня есть N пользователей с экспой от 0 до M.
Пользователи отсортированы по убыванию, от M до 0. Можно ли получить номер пользователя с id в этом списке?
Сейчас использую для этого REDIS.ZSET, но было бы интересно узнать решение на MySQL.
  • Вопрос задан
  • 3573 просмотра
Решения вопроса 1
middle
@middle
--- карма пользователя n.
SET @user_exp = (SELECT exp FROM users where id = {n});

SELECT count(*) FROM users
    WHERE exp > @user_exp OR (exp = @user_exp AND user.id < {n});


Второе условие в OR нужно на тот случай, если у двух пользователей окажется одинаковая карма (сортировать тогда нужно и по exp, и по id, чтобы пользователи с одинаковой кармой не прыгали с места на место даже без изменения кармы). Если этим можно пренебречь, то и условием можно пренебречь.

Но лучше правда обновлять специальное поле каждые 5 минут скриптом.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@phasma
SET @rn := 0;

SELECT * FROM (
SELECT @rn := @rn+1 AS id, exp
FROM users
ORDER BY users DESC
) WHERE id = {n};

что-то вроде этого
Ответ написан
apangin
@apangin
SELECT u1.*, COUNT(u2.id)+1 AS rating FROM users u1, users u2
WHERE u1.id = ? AND u2.exp > u1.exp

(Идея в том, чтобы считать кол-во пользователей с experience больше, чем у данного)
Ответ написан
XuMiX
@XuMiX
SET @rows_count = NULL;
SELECT name, @rows_count := IFNULL(@rows_count, 0) + 1 FROM city LIMIT 10;
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы