根据MySQL数据库中的点获取用户排名

时间:2014-01-22 13:38:25

标签: php mysql codeigniter model

我的codeigniter应用程序模型中有一个函数,它以点的降序返回行列表。这样做是为了获得具有最高点的行。

public function top_points()
    {
        $this->db->order_by('points', 'desc'); 
        $query=$this->db->get('player', 50);
        $data = $query->result_array();
        return $data;
    }

这可以很好地返回最高50分的数据。

但是我想在Player表格中找到我正在查询的特定玩家的位置/等级。我想通过id特定的玩家。

public function get_player_rank($player_id)
    {
            $this->db->where('player_id', $palyer_id); 
        $this->db->order_by('points', 'desc'); 
        $query=$this->db->get('player');
        $data = $query->result_array();
        return $data;
    }

我想使用这样的东西来获得由他的$ id指定的玩家的位置。就像他获得的积分排名一样。

我如何得到这个?

1 个答案:

答案 0 :(得分:1)

TRY

$sql = " 
SET @rownum=0;
SELECT player_id, rank 
FROM (
      SELECT player_id, @rownum := @rownum +1 AS rank FROM  `player` 
      ORDER BY  `points` DESC
     ) AS D
WHERE D.player_id=?";

$result = $this->db->query($sql,array($palyer_id))->row_array();

或者你可以试试

$sql = " 
         SELECT player_id, rank 
         FROM (
                SELECT player_id, @rownum := @rownum +1 AS rank
                FROM  `player` , (SELECT @rownum :=0 ) r
                ORDER BY  `points` DESC
              ) AS D
         WHERE D.player_id=?";
$result = $this->db->query($sql,array($palyer_id))->row_array();