引言:
前两天业务涉及到一个拉取答题排行榜的需求,数据库里数据是这样的:
同一个人可能提交过多次成绩,所以同一个人可能会有多次记录;
同一个人提交的多次成绩中可能有至少两次成绩是一样的。
于是,查询的时候,首先查询出每个人的最高成绩记录,然后如果某个人的最高成绩记录有多条,去重!
最终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))); }