Как лучше всего получить чей-то «ранг» из таблицы баллов с php и mysql без цикла

Моя таблица будет содержать оценки и инициалы.

Но таблица не будет заказана.

Я могу получить общее количество строк достаточно легко, и я знаю, что могу получить все из них и заказать By, а затем пропустить их и получить ранг THAT способом …

Но есть ли лучший способ? Может ли это быть сделано с помощью инструкции SQL?

Я не слишком беспокоюсь о производительности, поэтому, если SQL-запрос – это сумасшедшая вещь, тогда Ill просто цикл.

Извините. В таблице есть идентификатор как первичный ключ, строка для проверки уникальной установки приложения, столбец для инициалов и столбец для оценки.

Когда кто-то нажимает GET RANK … Я хочу сказать им, что их счет составляет 100 из 1000 игроков.

SELECT s1.initials, ( SELECT COUNT(*) FROM scores AS s2 WHERE s2.score > s1.score )+1 AS rank FROM scores AS s1 

У вас есть первичный ключ для таблицы или вы извлекаете данные по инициалам или вы просто извлекаете все данные и перебираете их, чтобы получить одну запись? Сколько результатов вы пытаетесь получить?

Если вы хотите получить только одну запись, как следует из названия, вы будете запрашивать базу данных с использованием условия WHERE:

 SELECT score FROM table WHERE user_id = '1'; 

См. Этот ответ: https://stackoverflow.com/a/8684441/125816

Короче говоря, вы можете сделать что-то вроде этого:

 SELECT id, (@next_rank := IF(@score <> score, 1, 0)) nr, (@score := score) score, (@r := IF(@next_rank = 1, @r + 1, @r)) rank FROM rank, (SELECT @r := 0) dummy1 ORDER BY score DESC; 

И это приведет к такому результату:

 +------+----+-------+------+ | id | nr | score | rank | +------+----+-------+------+ | 2 | 1 | 23 | 1 | | 4 | 1 | 17 | 2 | | 1 | 0 | 17 | 2 | | 5 | 1 | 10 | 3 | | 3 | 1 | 2 | 4 | +------+----+-------+------+ 

Обратите внимание, что пользователи с равными оценками имеют равные ранги. 🙂