引言:

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

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

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

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

最终sql语句如下:

/*拉取排行榜*/
public function rank(){
$data= json_decode(file_get_contents('php://input'), true);
$name = $data['name'];
$grade = $this->db->where('username',$name)->order_by('grade', 'DESC')->limit()->get('imt_1_news_comment_data_0')->row()->grade;
//查询答题表中分数大于当前用户分数的人数
$sum = count($this->db->where('grade > ',$grade)->order_by('grade', 'DESC')->limit()->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'=>,'msg'=>'拉取答题排行榜前'.$rank_num.'名成功!','my_grade'=>$grade,'my_rank'=>$sum+,'data'=>$return)));
}

由于poscms是基于CI框架的,所以CI中常见的数据库查询语句是该熟悉一点,所以在这里做个记录。

//一般查询
$this->db->select('name,grade')->where('sex','男')->limit(10,10)->get('tableName')->result();

一、查询结果集

->result();---------------------------------------------------返回object数组(多条记录)

->result_array();-------------------------------------------返回二维数组

->row();------------------------------------------------------返回一个对象(一条记录)

->row_array();----------------------------------------------返回一维数组

$this->db->insert_id();------------------------------------上一条插入的数据记录的id值(数据插到主表后,立即插到附表的话,id关联的时候回用到)

二、条件查询

->where('name','Jack');-----------------------------------条件是姓名为Jack

$ids = [1,2,3,4,5]

->where_in('id',$ids);--------------------------------------$ids是一个数组

->where_not_in('id',$ids);--------------------------------与上对立

$array = array('name !=' => $name, 'id <' => $id, 'date >' => $date);

->where($array);-------------------------------------------根据多个条件来筛选

$where = "name='Joe' AND status='boss' OR status='active'";

->where($where);------------------------------------------根据自定义的sql模式的where语句进行筛选

->like('title', 'match', 'before');---------------------------模糊匹配,第三个参数可选,不选的话就是下面第三种情况,%match

->like('title', 'match', 'after');-----------------------------模糊匹配,match%

->like('title', 'match', 'both');-----------------------------模糊匹配,%match%

->not_like('title', 'match', 'both')------------------------模糊匹配,与上对立

$array = array('title' => $match, 'page1' => $match, 'page2' => $match);

->like($array)-----------------------------------------------模糊匹配关联数组,%$match%

三、distinct去重

->select('username,grade')->distinct();---------------根据用户名和成绩去重,只有用户名和成绩都相同才会被去重

四、排序

->order_by('title DESC, name ASC');-----------------title降序name升序

->order_by('name','RANDOM');------------------------随机排序,第一个参数无实际意义,但是要写,随机嘛,谈不上根据哪个字段随机了

五、分页

->limit(10);---------------------------------------------------未设置偏移量,那么默认偏移量为0,即从0开始选择,选出10条数据

->limit(10,10);-----------------------------------------------设置了偏移量,从10开始,选出10条数据,即11-20条记录

六、计数

->count_all('tableName')---------------------------------查询数据表中总的记录数

->where($where)->from('tableName')->count_all_results();查询符合当前条件的记录的数目,注意用from而不是get

->where($where)->count_all_results('tableName');效果同上

七、插入记录

$data = array(

  'title' => 'My title',

  'name'=>'My name',

);

->insert('tableName',$data);-----------------------------往表中插入一条数据

$data = array(

      array(

        'title' => 'My title',

        'name'=>'My name',

      ),

      array(

        'title' => 'My title',

        'name'=>'My name',

      )

);

->insert_batch('tableName',$data);--------------------往表中插入多条记录

八、更新

$data = array(

  'title' => 'My title',

  'name'=>'My name',

);

->where('id',5)->updata('tableName',$data);--------更新主键(id)为5的记录的相关数据

九、删除

$this->db->where('id', $id);

$this->db->delete('mytable');

CodeIgniter (CI)框架中的数据库查询汇总的更多相关文章

  1. CodeIgniter(CI)框架中的验证码

    在CodeIgniter框架中,CI本身自带了验证码,但是查看文档的时候,发现: 需要新建一个表,用来存储验证码信息.因为习惯了session存储验证码信息,所以我把我认为比较好看的验证码应用在了CI ...

  2. php CI框架中URL特殊字符处理与SQL注入隐患

    php CI框架中URL特殊字符处理与SQL注入隐患 php CI框架中URL特殊字符有很多是不支持的,导致像c++,括号这些常用的分类,字符都无法正常显示很头痛,而在配置里增加单引号' 反斜杠\ 这 ...

  3. Laravel框架中的数据库CURD操作、连贯操作、链式操作的用法

    Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁.富于 ...

  4. CI 框架中的日志处理 以及 404异常处理

    最近在整理项目中的日志问题,查了一些关于 “CI 框架中的日志处理 以及 404异常处理” 的东西,顺便记录一下: 关于错误日志: 1. 在CI框架中的 system/core/CodeIgniter ...

  5. 对CI框架中几个文件libraries

    对CI框架中几个文件libraries,helpers,hooks夹说明 来源:未知    时间:2014-10-20 11:37   阅读数:117   作者:xbdadmin [导读] 1.lib ...

  6. 混合框架中Oracle数据库的还原处理操作

    在较早期的随笔<Oracle如何实现创建数据库.备份数据库及数据导出导入的一条龙操作>粗略介绍了Oracle数据库的备份还原操作,本文想从开发框架的基础上介绍Oracle数据库的脚本或者还 ...

  7. CI 框架中的自定义路由规则

    在 CI 框架中,一个 URL 和它对应的控制器中的类以及类中的方法是一一对应的,如: www.test.com/user/info/zhaoyingnan 其中 user 对应的就是控制器中的 us ...

  8. php json_encode在CI框架中的使用细节

    这个错误的造成原因是加载类类库,转换成json格式的时候不熟悉CI框架的规定导致的,CI框架中规定在将数据转换成json格式的时候需要将类库小写,当然了,调用的时候必须保证有这个类库,且可以在对应的文 ...

  9. CI框架中集成CKEditor编辑器的教程

    CKEditor是在很多开发过程中都会用到的一个富文本编辑器,那么如何在CI框架中使用它呢?这里介绍了在CI下使用CKEditor的方法,版本比较低,是在CI 1.7.3下使用fckeditor 2. ...

随机推荐

  1. Hadoop家族学习路线图-张丹老师

    前言 使用Hadoop已经有一段时间了,从开始的迷茫,到各种的尝试,到现在组合应用….慢慢地涉及到数据处理的事情,已经离不开hadoop了.Hadoop在大数据领域的成功,更引发了它本身的加速发展.现 ...

  2. C#前后端交互

    后台接收 方式1: Request.Form[""] post Request.QueryString[""] get System.Web.HttpConte ...

  3. 基于对象的跨表查询,多对多查询,多对多操作,聚合查询和分组查询,F查询和Q 查询

    基于对象的跨表查询 一对多查询(班级表和学生表) 表结构创建 class Class(models.Model): id = models.AutoField(primary_key=True) cn ...

  4. selenium的下拉选择框

    今天总结下selenium的下拉选择框.我们通常会遇到两种下拉框,一种使用的是html的标签select,另一种是使用input标签做的假下拉框. 后者我们通常的处理方式与其他的元素类似,点击或使用J ...

  5. Mac下 javac java 进行编译和运行含有包路径及引入jar包的类

    近两天因为刚入职,属于熟悉环境的阶段,研究了下算法(第四版),当不使用IDE工具直接使用终端进行javac 编译带有包的类,然后使用java 会出现如下错误提示: 使用谷歌搜索了很久,终于找到解决的办 ...

  6. pig(转载)

    本文可以让刚接触pig的人对一些基础概念有个初步的了解.本文大概是互联网上第一篇公开发表的且涵盖大量实际例子的Apache Pig中文教程(由Google搜索可知),文中的大量实例都是作者Darran ...

  7. js原型 作用域

    了解JavaScript原型链之前首先肯定要知道什么是原型. JavaScript中,原型是一个对象,通过原型可以实现属性的继承.既然原型是一个对象,那么任何一个对象都可以称为原型吗?是,记住它.什么 ...

  8. 【Head First Servlets and JSP】笔记2:MVC迷你教程

    1.采用MVC,不仅要求业务逻辑和表示分离.实际上,业务逻辑甚至根本不知道表示的存在.MVC的关键是,业务逻辑要与表示分离,而要求在中间放上别的东西,这样业务逻辑本身就可以作为一个可以重用的Java类 ...

  9. python继承,判断类型,多态

    1.python中继承 如果已经定义了Person类,需要定义新的Student和Teacher类时,可以直接从Person类继承: class Person(object): def __init_ ...

  10. JSR规范整理

    Web Service技术 Java Date与Time API ( JSR 310) Java API for RESTful Web Services (JAX-RS) 1.1 (JSR 311) ...