bigton
@bigton
Web-программист

Как узнать место пользователя в зависимости от набранных очков?

Всем привет!

Представим таблицу со следующей структурой и одним миллионом строк.
CREATE TABLE `table` (
  `user_id` int(11) NOT NULL DEFAULT 0, 
  `points` int(11) NOT NULL DEFAULT 0,
  PRIMARY KEY (`user_id`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

Значения в points постоянно меняются, могут увеличиваться, могут уменьшаться.
У кого самого большое значение points - у того первое место.
У кого самое маленькой значение points - у того последнее место.

1. Можно ли одним запросом узнать текущее место любого пользователя?
2. Можно ли решить эту задачу без полного сканирования таблицы (какое-то магическое виртуальное поле)?

Спасибо за ответы!
  • Вопрос задан
  • 99 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT COUNT(*) + 1
  FROM `table`
  WHERE `points` > (
    SELECT `points`
      FROM `table`
      WHERE `user_id` = :userId
      LIMIT 1
  )
Для ускорения стоит создать индекс по полю points.
Только есть вопрос, если есть два игрока с одинаковым количеством баллов, то какие у них места?
Ответ написан
Ваш ответ на вопрос

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

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