2011-01-12 26 views
1

例如我有像這樣的表:php/mysql - 如何獲得用戶的排名?

 
name rating 
matei  124 
andrei  20 
serj  25 
john  190 
mike  96 
andy  245 
tom  73 

我需要輸出是這樣的(爲了通過等級):

john的位置是2;或者,湯姆的位置是5; (我不需要得到所有結果,只有一個)

我該如何做到這一點?提前

感謝

+1

你的問題到底是什麼?如果它是如何查詢表格的,你可能想看看他有的基本的PHP/mySQL教程 – 2011-01-12 13:10:37

回答

1
SELECT COUNT(*) + 1 
FROM users 
WHERE (rating, name) < 
     (
     SELECT rating, name 
     FROM users 
     WHERE name = 'john' 
     ) 

請注意,如果你將有兩個名稱和等級副本,該查詢將在同一等級分配給他們兩個。

0

表更正式地稱爲relations數據庫文獻 - 他們都不能保證訂購(它們是一組「元組」的),所以你的問題沒有意義。如果您需要依賴訂單/位置,則需要定義一個附加列(如自動遞增ID列)以捕獲並存儲該信息。

2

通常,MySQL不保證查詢結果中行的順序,除非使用ORDER BY子句顯式指定順序。如果你有一些不同的排序列,你可以使用類似下面的查詢:

SELECT count(1) as position 
FROM table 
WHERE order_column <= {john's order_column value}; 

如果您沒有訂購欄,我建議你先來定義,什麼是「約翰的位置」和「湯姆的位置「的意思。

更新: AFAIU,你想獲得按排名排序的位置(對不起,我最初沒有得到它)​​。所以,評級將是您的order_column。在這種情況下,你應該決定,如果兩個人有相同的評分(誰的位置更高?),你如何計算位置?

因此,查詢可能看起來下列方式:

SELECT count(1) as position 
FROM table 
WHERE 
    rating > (SELECT rating FROM table WHERE id={user's ID}); 
+0

。評級是。 – 2011-01-12 13:26:11

+0

是的評價是,我需要通過評分得到用戶排名的排名 – John 2011-01-12 13:31:30

0

會像這樣偏移不行?

SELECT * FROM Table ORDER BY rating DESC LIMIT 1,6 

這將返回1行已被關閉設置6行?或者是我錯了,語法將

SELECT * FROM Table ORDER BY rating DESC LIMIT 1 , {{POS}}