2017-07-06 79 views
0

我有一個用戶表user_score列在視圖方面我想顯示每個用戶的排名和得分和2人之前/之後。如何創建排名系統

我該如何用MySQL或PHP以最少的執行時間來實現?

例如

+-----------+------------+ 
| User_id | Score  | 
+-----------+------------+ 
| 1   | 12258  | 
| 2   | 112  | 
| 3   | 9678  | 
| 4   | 689206  | 
| 5   | 1868  | 
+-----------+------------+ 

例如我user_id = 3。我想說明這樣

    you 
        9678  

user befor you    user after you 
    12258       1868  
+0

酷,寫一些'php'代碼來實現這一點。 – urfusion

+0

這應該在您的PHP表示層而不是在MySQL中處理。 –

+1

我懷疑這是可能的一次去(查詢)。你需要採取兩步走的方法。 – arkascha

回答

1

如果你想使用,僅在MySQL:

SELECT usr中。 user_id,(SELECT USR1。user_score FROM user USR1 WHERE USR。user_score> = USR1。user_score AND USR。user_id!= USR1。user_id ORDER BY USR1。user_score DESC LIMIT 1)AS user_before_you,USR。 user_score AS you,(選擇USR1。user_score FROM user USR1 WHERE usr中。user_score < = USR1。user_score和USR。user_id!= USR1。user_id ORDER BY USR1。user_score ASC LIMIT 1)user_after_you FROM user USR WHERE 1

+0

非常感謝,它的工作完美,但此代碼有問題,沒有返回當前用戶前後的用戶ID,可能我們有衝突 –