CodeIgniter (CI)框架中的数据库查询汇总

引言:

前两天业务涉及到一个拉取答题排行榜的需求,数据库里数据是这样的:

同一个人可能提交过多次成绩,所以同一个人可能会有多次记录;

同一个人提交的多次成绩中可能有至少两次成绩是一样的。

于是,查询的时候,首先查询出每个人的最高成绩记录,然后如果某个人的最高成绩记录有多条,去重!

最终sql语句如下:

/*拉取排行榜*/
    public function rank_list(){
        $data= json_decode(file_get_contents('php://input'), true);
        $name = $data['name'];
        $grade = $this->db->where('username',$name)->order_by('grade', 'DESC')->limit(1)->get('imt_1_news_comment_data_0')->row()->grade;
        //查询答题表中分数大于当前用户分数的人数
        $sum = count($this->db->where('grade > ',$grade)->order_by('grade', 'DESC')->limit(1)->get('imt_1_news_comment_data_0')->result());
        $rank_num = dr_var("rank_num");
        $sql = "select distinct username,head_img,grade,rewards from imt_1_news_comment_data_0 a where grade=(select max(grade) from imt_1_news_comment_data_0 where username=a.username)  order by grade DESC,inputtime DESC limit ".$rank_num;
        $return = $this->db->query($sql)->result();
        exit(json_encode(array('code'=>1,'msg'=>'拉取答题排行榜前'.$rank_num.'名成功!','my_grade'=>$grade,'my_rank'=>$sum+1,'data'=>$return)));
    }
 

猜你喜欢

转载自www.cnblogs.com/eco-just/p/9234199.html