Получите звание, основанное на баллах, из неупорядоченной базы данных MySql, когда ему дали имя пользователя

Хорошо, поэтому у меня есть таблица, которая имеет следующие

KEY username password score 

Вышеуказанные столбцы не указаны в определенном порядке.

Я хочу отправить свою базу данных имя пользователя и отправить мне обратно, какой ранг это имя пользователя основано на его оценке. Так, например, если у меня было 10 человек, а 3-й человек имеет самый высокий балл. Когда я передаю имя пользователя 3-го лица, я хочу, чтобы он отправил обратно 1.

Это возможно?

Я пробовал такие вещи

 $result = mysql_query("SELECT * FROM tablename where username='$username' ORDER BY score DESC"); 

но он, кажется, не дает мне номер строки

Это будет обрабатывать ранги, имеющие одинаковый балл.

 SELECT d.*, c.ranks FROM ( SELECT Score, @rank:=@rank+1 Ranks FROM ( SELECT DISTINCT Score FROM tableName a ORDER BY score DESC ) t, (SELECT @rank:= 0) r ) c INNER JOIN tableName d ON c.score = d.score // WHERE d.username = 'Helen' 
  • SQLFiddle Demo ( рейтинг с дубликатами )
  • Демоверсия SQLFiddle ( с фильтрацией )

например

 KEY username password score Ranks 1 Anna 123 5 3 2 Bobby 345 6 2 3 Helen 678 6 2 4 Jon 567 2 4 5 Arthur ddd 8 1 

для повышения производительности добавьте INDEX в столбце Score ,

 ALTER TABLE tableName ADD INDEX (Score) 
 SELECT (SELECT COUNT(*)+1 FROM tablename WHERE score > t.score) as rank, * FROM tablename t where username='$username' 

ORDER BY в вашем запросе бесполезен, поскольку вы возвращаете только одну строку.