MySQL选择用户的位置

Isi*_*sis 6 mysql rating

我有一个表用户:

id  |   rating
1       4
2       -1
3       12
4       0
5       2
6       0
Run Code Online (Sandbox Code Playgroud)

我如何通过评级来评估用户的位置排序在哪里id = N和具有相似评级的用户在顶部具有相同的位置?

UPD:我想输出:

如果userid = 1,他的rank is 2,如果userid = 2他的rank is 5,如果userid = 3,rank is 1...但如果userid = 4还是6他们的rank are 4,因为利率是相似的.

Ome*_*esh 5

我想你想找到所有 user_id 的评级:

SELECT id,
       IF(rating <> @var_rating_prev, (@var_rank:= @var_rank + 1), @var_rank) AS rank,
       (@var_rating_prev := rating) AS rating
FROM table_name a,(SELECT @var_rank := 0, @var_rating_prev := 0) r
ORDER BY rating DESC;
Run Code Online (Sandbox Code Playgroud)

示例@sqlfiddle

如果您不想更改输出中记录的顺序,请尝试以下操作:

SELECT a.*, b.rank
FROM test_table a
     INNER JOIN (
            SELECT id,
                   IF(rating <> @var_rating_prev, (@var_rank:= @var_rank + 1), @var_rank) AS rank,
                   (@var_rating_prev := rating) AS rating
            FROM test_table a,(SELECT @var_rank := 0, @var_rating_prev := 0) r
            ORDER BY rating DESC
        ) b
         ON a.id = b.id
ORDER BY a.id;
Run Code Online (Sandbox Code Playgroud)

  • OP 希望为给定的用户 ID 找到他在评级系统中的排名 (2认同)