[英]Get a rank, based on score, from an unordered MySql Database when given a Username
好的,所以我有一張表有以下內容
KEY username password score
以上列沒有任何特定順序。
我想向我的數據庫發送一個用戶名,讓它根據其得分將該用戶名的等級發回給我。 例如,如果我在那里有10個人,那么第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
為了獲得更好的性能,請在列Score
上添加INDEX
,
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
是無用的,因為您只返回一行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.