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

Posted

技术标签:

【中文标题】根据 MySQL 数据库中的点数获取用户排名【英文标题】:Get User Ranking based on points from MySQL Database 【发布时间】:2014-02-12 14:27:26 【问题描述】:

我的 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】:

试试

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

【讨论】:

我的表中没有rank 列。 points 列有累积点数。 排名栏为您提供排名。它只是用户定义变量@rownum 的别名 当我尝试第一个选项时,我收到错误“A Database Error Occurred Error Number: 1064 You have an error in your SQL syntax;检查与您的 mysql 服务器版本对应的手册以获取正确的语法在第 2 行的 'SELECT fb_id, rank FROM (SELECT fb_id, @rownum := @rownum +1 AS rank F' 附近使用 SET @rownum=0; SELECT fb_id, rank FROM (SELECT fb_id, @rownum := @rownum +1 AS rank FROM User ORDER BY points DESC ) AS D WHERE D.fb_id='832357449'" 我的函数:public function my_rank($id) $sql = " SET @rownum=0; SELECT fb_id, rank FROM ( SELECT fb_id, @rownum := @rownum +1 AS rank FROM User` ORDER BY points DESC ) AS D WHERE D.fb_id=?"; $result = $this->db->query($sql,array( $id))->row_array(); ` 尝试第二个查询它的单个查询.. 同时我将检查 codeignitor 中的第一个查询并让您知道响应。两个查询在 phpmyadmin 中都能正常工作

以上是关于根据 MySQL 数据库中的点数获取用户排名的主要内容,如果未能解决你的问题,请参考以下文章

MySQL,获取用户排名

更新 MySQL 表中的排名

如何在mysql中获取这个特定的用户排名查询?

根据 PostgreSQL 中的频率获取日期的单词排名

从使用 PHP 的 MySQL 数据库到 iPhone 的分数列表中获取排名

mysql中的用户按他们的分数排名