Хорошо, поэтому у меня есть таблица, которая имеет следующие
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'
например
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
в вашем запросе бесполезен, поскольку вы возвращаете только одну строку.