Php 从MySQL数据库中获取基于分数的用户排名

Php 从MySQL数据库中获取基于分数的用户排名,php,mysql,codeigniter,model,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(); retur

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

public function top_points()
    {
        $this->db->order_by('points', 'desc'); 
        $query=$this->db->get('player', 50);
        $data = $query->result_array();
        return $data;
    }
这可以很好地返回最高50点的数据

但是,我想在我查询的玩家表中查找特定玩家的位置/等级。我想要一个特定的球员的id

我想用这样的东西来获得一个球员的位置,这个位置由他的$id指定。比如根据他的积分排名

我怎样才能得到这个呢?

试试看

$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();

我的表中没有秩列。“积分”列包含累计积分。“排名”列为您提供排名。这只是用户定义变量@rownumWhen的别名。当我尝试第一个选项时,我得到了一个错误。出现了一个数据库错误错误号:1064您的SQL语法有一个错误;检查与您的MySQL服务器版本对应的手册,了解在第2行的“选择fb_id,从选择fb_id排名,@rownum:=@rownum+1作为排名F”附近使用的正确语法设置@rownum=0;选择fb_id,从中排名选择fb_id,@rownum:=@rownum+1作为用户订单中的排名按点描述为D,其中D.fb_id='832357449'我的函数:公共函数我的排名$id{$sql=SET@rownum=0;从SELECT fb_id中选择fb_id,排名,@rownum:=@rownum+1作为用户`按点排序描述为D,其中D.fb_id=?;$result=$this->db->query$sql,array$id->row_array;}'尝试第二个查询它是一个查询。.同时,我将在codeignitor中检查第一个查询并让您知道响应。这两个查询在phpmyadmin中都可以正常工作
$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();