例如我有像這樣的表:php/mysql - 如何獲得用戶的排名?
name rating matei 124 andrei 20 serj 25 john 190 mike 96 andy 245 tom 73
我需要輸出是這樣的(爲了通過等級):
john的位置是2;或者,湯姆的位置是5; (我不需要得到所有結果,只有一個)
我該如何做到這一點?提前
感謝
例如我有像這樣的表:php/mysql - 如何獲得用戶的排名?
name rating matei 124 andrei 20 serj 25 john 190 mike 96 andy 245 tom 73
我需要輸出是這樣的(爲了通過等級):
john的位置是2;或者,湯姆的位置是5; (我不需要得到所有結果,只有一個)
我該如何做到這一點?提前
感謝
SELECT COUNT(*) + 1
FROM users
WHERE (rating, name) <
(
SELECT rating, name
FROM users
WHERE name = 'john'
)
請注意,如果你將有兩個名稱和等級副本,該查詢將在同一等級分配給他們兩個。
表更正式地稱爲relations數據庫文獻 - 他們都不能保證訂購(它們是一組「元組」的),所以你的問題沒有意義。如果您需要依賴訂單/位置,則需要定義一個附加列(如自動遞增ID列)以捕獲並存儲該信息。
通常,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});
。評級是。 – 2011-01-12 13:26:11
是的評價是,我需要通過評分得到用戶排名的排名 – John 2011-01-12 13:31:30
會像這樣偏移不行?
SELECT * FROM Table ORDER BY rating DESC LIMIT 1,6
這將返回1行已被關閉設置6行?或者是我錯了,語法將
SELECT * FROM Table ORDER BY rating DESC LIMIT 1 , {{POS}}
你的問題到底是什麼?如果它是如何查詢表格的,你可能想看看他有的基本的PHP/mySQL教程 – 2011-01-12 13:10:37