簡體   English   中英

在給定用戶名時,從無序的MySql數據庫中獲取基於分數的排名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM