CodeIgniter (CI)框架中的数据库查询汇总
引言:
前两天业务涉及到一个拉取答题排行榜的需求,数据库里数据是这样的:
同一个人可能提交过多次成绩,所以同一个人可能会有多次记录;
同一个人提交的多次成绩中可能有至少两次成绩是一样的。
于是,查询的时候,首先查询出每个人的最高成绩记录,然后如果某个人的最高成绩记录有多条,去重!
最终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)框架中的数据库查询汇总的更多相关文章
- CodeIgniter(CI)框架中的验证码
在CodeIgniter框架中,CI本身自带了验证码,但是查看文档的时候,发现: 需要新建一个表,用来存储验证码信息.因为习惯了session存储验证码信息,所以我把我认为比较好看的验证码应用在了CI ...
- php CI框架中URL特殊字符处理与SQL注入隐患
php CI框架中URL特殊字符处理与SQL注入隐患 php CI框架中URL特殊字符有很多是不支持的,导致像c++,括号这些常用的分类,字符都无法正常显示很头痛,而在配置里增加单引号' 反斜杠\ 这 ...
- Laravel框架中的数据库CURD操作、连贯操作、链式操作的用法
Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁.富于 ...
- CI 框架中的日志处理 以及 404异常处理
最近在整理项目中的日志问题,查了一些关于 “CI 框架中的日志处理 以及 404异常处理” 的东西,顺便记录一下: 关于错误日志: 1. 在CI框架中的 system/core/CodeIgniter ...
- 对CI框架中几个文件libraries
对CI框架中几个文件libraries,helpers,hooks夹说明 来源:未知 时间:2014-10-20 11:37 阅读数:117 作者:xbdadmin [导读] 1.lib ...
- 混合框架中Oracle数据库的还原处理操作
在较早期的随笔<Oracle如何实现创建数据库.备份数据库及数据导出导入的一条龙操作>粗略介绍了Oracle数据库的备份还原操作,本文想从开发框架的基础上介绍Oracle数据库的脚本或者还 ...
- CI 框架中的自定义路由规则
在 CI 框架中,一个 URL 和它对应的控制器中的类以及类中的方法是一一对应的,如: www.test.com/user/info/zhaoyingnan 其中 user 对应的就是控制器中的 us ...
- php json_encode在CI框架中的使用细节
这个错误的造成原因是加载类类库,转换成json格式的时候不熟悉CI框架的规定导致的,CI框架中规定在将数据转换成json格式的时候需要将类库小写,当然了,调用的时候必须保证有这个类库,且可以在对应的文 ...
- CI框架中集成CKEditor编辑器的教程
CKEditor是在很多开发过程中都会用到的一个富文本编辑器,那么如何在CI框架中使用它呢?这里介绍了在CI下使用CKEditor的方法,版本比较低,是在CI 1.7.3下使用fckeditor 2. ...
随机推荐
- pyplot基本绘制
pyplot实现的功能与Matlab中的绘制方式很相似. 先看一个绘制折线的例子: import matplotlib.pyplot as plt plt.plot([1, 17, 8, 9]) pl ...
- nginx灰度环境
1.nginx.conf split_clients "${remote_addr}AAA" $request_type { 25% "abtest"; * & ...
- MySQL之 视图,触发器,事物,存储过程,函数(Day48)
阅读目录 一.视图 二.触发器 三.事物 四.存储过程 五.函数 六.流程控制 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名 ...
- beego——参数配置
beego目前支持INI.XML.JSON.YAML格式的配置文件解析,但是默认采用了INI格式解析,用户可以通过简单的配置就可以获得很大的灵活性. 一.默认配置解析 beego 默认会解析当前应用下 ...
- Loadrunder场景设计篇——定时器(schedule)
A. 定义方案schedule 在 Scenario Schedule面板中,选择一个方案schedule,或通过点击New Schedule定义一个新的方案 定义schedule: a.新建sc ...
- $ 专治各种python字符编码问题疑难杂症
标准动作 在脚本第一行指定编码格式: # coding:utf-8 将默认的ascii字符流处理方式变为utf-8: import sys sys.getdefaultencoding() 'asci ...
- Windows Server 2008 R2 FTP无法从外部访问的解决方法
在Windows Server 2008 R2中配置好FTP服务器后,可以在本机访问,但是无法从另一台电脑访问.原因就是在于防火墙没有配置好. 1.首先检查服务器管理器中的入站规则,确保已启用FTP服 ...
- 分布式集群Session原理及实现共享
1.什么是Session/Cookie? 用户使用网站的服务,基本上需要浏览器与Web服务器的多次交互.HTTP协议本身是无状态的,当用户的第一次访问请求结束后,后端服务器就无法知道下一次来访问的还是 ...
- 2018-2019-2 20165114《网络对抗技术》Exp2 后门原理与实践
目录 一.实验准备 二.实验内容 三.基础问题回答 四.实验过程及步骤 五.实验总结与体会 六.实验中遇到的问题与错误. 一.实验准备 1.后门概念 后门就是不经过正常认证流程而访问系统的通道. 哪里 ...
- 剑指offer题解02-10
02 单例模式 单例模式,是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例.即一个类只有一个对象实例. 从具体实现角 ...