Mysql select查询次数直到达到条件

Mysql select query count until reach the condition

我有用户列表以及他的积分和游戏 ID。我需要根据最大lb_point的游戏顺序找到指定用户的排名。下面是我的table。

lb_id    user_id   game_id   room_id   lb_point
------------------------------------------------
1         1        2         1         670     
2         1        1         2         200     
3         1        2         2         650     
4         1        1         1         400     
5         3        2         1         700     
6         4        2         5         450     
7         2        1         3         550     
8         2        1         1         100     
9         1        1         1         200     

我已经使用 PHP 代码完成了此操作,其工作正常如下。

$game_id = 2;
$user_id = 1;
$query_rnk = $this->db->query('SELECT user_id AS uid FROM leader_board WHERE game_id = "'.$game_id.'" GROUP by user_id ORDER BY lb_point DESC');
        if ($query_rnk->num_rows() > 0){
            $j=1;
            foreach($query_rnk->result() as $row_rnk){
                if($row_rnk->uid == $user_id){
                    $rnk_status = 1;
                    break;
                }
            $j++;
            }
            if($rnk_status == 1){
                $resp['rank'] = $j;
            }
        }

答案是:2.

但我需要使用一个查询来找到它。有什么想法吗?

您可以使用 select 计算适当 select

的行数
select count(*) 
from (
      select distinct user_id
      from leader_board 
      where   lb_point >= (select  max( lb_point )
             from leader_board 
             where user_id = 1   
             and game_id = 2 )
      and game_id = 2
) t

如果你想获得user_id = 1的排名,试试这个:

SELECT urank
FROM (
    SELECT user_id AS uid, @rank := @rand + 1 AS urank
    FROM leader_board
    CROSS JOIN (SELECT @rank := 0) t
    WHERE game_id = '$game_id'
    GROUP by user_id
    ORDER BY lb_point DESC
) tmp
WHERE uid = '$user_id'
SELECT count(*)+1 as Rank from (select lb_point from games where game_id =2 order by lb_point DESC) as list where list.lb_point > (select max(lb_point) from games where user_id = 1 and game_id = 2)

这将为 user_id = 1 在 game_id = 2 中给出排名 2,这是您在问题中提到的答案。