我是新來的sql,我從來沒有在mysql中使用變量或條件,但知道來自其他編程語言。由於幾天我試圖找到排名用戶評分的方法。我閱讀了大量的文章,以及在stackoverflow上提出的問題,最後我找到了一個幾乎像我想要的那樣的解決方案。MySQL排名關係
SELECT
score_users.uid,
score_users.score,
@prev := @curr,
@curr := score,
@rank := IF(@prev = @curr, @rank, @rank +1) AS rank
FROM
score_users,
(SELECT @curr := null, @prev := null, @rank := 0) tmp_tbl
WHERE
score_users.matchday = 1
ORDER BY
score_users.score DESC
但我的問題是領帶分數。我不希望得到連續的行列,像這樣:
+------------+------+--------+
| uid | name | rank | score |
+------------+------+--------+
| 4 | Jon | 1 | 20 |
| 1 | Jane | 2 | 19 |
| 2 | Fred | 2 | 19 |
| 9 | July | 3 | 18 |
| 7 | Mary | 4 | 17 |
| 3 | Toni | 5 | 12 |
| 5 | Steve | 5 | 12 |
| 6 | Peter | 6 | 11 |
| 8 | Nina | 7 | 10 |
+------------+------+--------+
我想獲得這樣的結果:
+------------+------+--------+
| uid | name | rank | score |
+------------+------+--------+
| 4 | Jon | 1 | 20 |
| 1 | Jane | 2 | 19 |
| 2 | Fred | 2 | 19 |
| 9 | July | 4 | 18 |
| 7 | Mary | 5 | 17 |
| 3 | Toni | 6 | 12 |
| 5 | Steve | 6 | 12 |
| 6 | Peter | 8 | 11 |
| 8 | Nina | 9 | 10 |
+------------+------+--------+
我想我必須創建一個新的臨時表,還有一些如果條件,但我找不到解決辦法,變得絕望! 另外,我必須密切注意表現,也許有更好的方法來獲得排名,因爲我做到了?我會非常感謝提示或一些代碼片段。
我生成SQL之外的排名,因爲它更容易與你使用任何程序(按分數排名是足夠了)做的。做你正在做的事情在MySQL中很複雜! – serakfalcon