ThinkPHP3快速入门教程三:查询语言
一、查询语言简介:
ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,查询条件可以用于读取、更新和删除等操作,主要涉及到where方法等连贯相关方法操作即可,
此框架查询系统可以解决不同数据库的差异性,因些我们把框架的这一查询方式称之为查询语言。使其查询操作更加简单易懂。
二、查询方式:
ThinkPHP可以支持直接使用字符串作为查询条件,但是大多数情况推荐使用索引数组或者对象来作为查询条件,因为会更加安全。
1、使用字符串作为查询条件(最传统的方式,但是安全性不高),例如:
$User = M(“User”); //实例化User对象
$User -> where(‘type=1 AND status=1’) -> select();
生成SQL语句:SELECT *FORM think_user WHERE type=1 AND status=1;
注意:采用字符串查询的时候,我们可以配合使用新版提供的字符串条件的安全预处理机制。
2、使用数组作为查询条件
这种方式是最常用的查询方式,例如:
$User = M(“User”); //实例化User对象
$condition[‘name’] =’thinkphp’;
$condition[‘status’] = 1;
//把查询条件传入查询方法
$user -> where($condition) -> select();
//生成的SQL语句
SELECT*FORM think_user WHERE ‘name’ = ‘thinkphp’ AND status=1;
如果进行多字段查询,那么字段之间的默认逻辑关系是逻辑与AND,但是用下面的规则可以更改默认的逻辑判断,通过使用_logic定义查询逻辑:
$User = M(“user”); //实例化User对象
$condition[‘name’] = ‘thinkphp’;
$condition[‘account’] = ‘thinkphp’;
$condition[‘_logic’] = ‘OR’;
//把查询条件传入查询方法
$User -> Where($condition)->select();
生成的SQL语句:SELECT * FROM think_user WHERE `name`='thinkphp' OR `account`='thinkphp';
3、使用对象方式来查询
这里以stdClass内置对象为例:
$User = M(“User”); //实例化User对象
//定义查询条件
$condition = new stdClass();
$codition -> name= ’thinkphp’;
$codition -> status = 1;
$User -> where($condition) ->select();
生成的SQL语句:SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
使用对象方式和数组方式来查询数据是一样的,大多数情况下,建议使用数组方式更加高效。
三、表达式查询:
ThinkPHP查询语言的精髓,查询表达式的使用格式:
$map[‘字段名’] = array(‘表达式’,‘查询条件’);
表达式不分大小写,支持的查询表达式有下面几种,分别表示的含义是:
示例如下:
EQ:等于(=)
例如:
$map[‘id’] = array(‘eq’,100);
$map[‘id’] = 100;//和上面查询等效
查询条件为:id=100
NEQ:不等于(<>)
例如:
$map[‘id’] = array(‘neq’,100);
表示的查询条件就是id<>100
GT:大于(>)
例如:
$map[‘id’] = array(‘gt’,100);
表示查询条件就是id>100
EGT:大于等于(>=)
例如:
$map[‘id’] = array(‘egt’,100);
表示的查询条件就是id>=100
LT:小于(<)
例如:
$map[‘id’] = array(‘lt’,100);
表示的查询条件就是id<100
ELT: 小于等于(<=)
例如:
$map[‘id’] = array(‘elt’,100);
表示的查询条件就是id<=100
[NOT]LIKE:同sql的LIKE
例如:
$map[‘name’] = array(‘like’,’thinkphp%’);
查询条件:name like ‘thinkphp%’
如果配置了DB_LIKE_FIEKLDS参数的话,某些字段也会自动进行模糊查询。例如设置了:
‘DB_LIKE_FIELDS’参数的话,某些字段也会自动进行模糊查询。例如设置了:
‘DB_LIKE_FIELDS’ => ‘title|content’;的话,使用$map[‘title’]=’thinkphp%’;
查询条件就会变成title like ‘%thinkphp%’
支持数组方式,例如:
$map[‘a’] = array(‘like’,array(‘%thinkphp%’,’%tp’),’OR’);
$map[‘b’] = array(‘notlike’,array(‘%thinkphp%’,’%tp’),’AND’);
生成的查询条件:
(a like ‘%thinkphp%’ OR a like ‘%tp’) AND (b not like ‘%thinkphp%’ AND like ‘%tp’)
[NOT] BETWEEN : 同sql的[not]between,查询条件支持字符串或者数组,例如:
$map[‘id’] = array(‘between’,’1,8’);
$map[‘id’] = array(‘between’,array(‘1’,’8’)); //和上行语句等效
查询条件就变成id BETWEEN 1 AND 8
[NOT]IN:同sql的[NOT]的in,查询条件支持字符串或者数组,例如:
$map[‘id’] = array(‘not in’,’1,5,8’);
$map[‘id’] = array(‘not in’,array(‘1’,’5’,’8’)); //和上条语句等效
查询条件:id NOT IN(1,5,8)
EXP:表达式,支持更复杂的查询情况
例如:$map[‘id’] = array(‘in’,’1,3,8’);
可改成:
$map[‘id’] = array(‘exp’,’IN(1,3,8)’);
Exp查询的条件不会被当成字符串,所以后面的查询条件可以使用任何SQL支持的语法,
包括使用函数和字段名称。查询表达式不仅可用于查询条件,也可以用于数据更新,例如:
$User = M(“User”); //实例化User对象
//要修改的数据对象属性赋值
$data[‘name’] = ‘ThinkPHP’;
$data[‘score’] = array(‘exp’,’score+1’); //用户的积分加1
$User->where(‘id=5’)->save($data); //根据条件保存修改的数据
四、快捷查询:
3.0版本开始,增加了快捷查询方式,可以进一步简化查询条件的写法,例如:
1、实现不同字段相同的查询条件
$User = M(“User”); //实例化User对象
$map[‘name|title’] = ‘thinkphp’;
//把查询条件传入查询方法
$User->where($map)->select();
查询条件:name= ’thinkphp’ OR title = ‘thinkphp’
2、实现不同字段不同的查询条件
$User = M(“user”); //实例化User对象
$map[‘status&title’]=array(‘1’, ’thinkphp’, ’_multi’=>true);
//把查询条件传入查询方法
$User -> where($map) -> select();
‘_multi’ => true 必须加在数组的最后,表示当前是多条件匹配,这样查询条件就变成:status= 1 AND title= ’thinkphp’
查询字段支持最多的,例如:
$map['status&score&title'] =array('1',array('gt','0'),'thinkphp','_multi'=>true);
查询条件变成:status= 1 AND score>0 AND title = ‘thinkphp’
注意:快捷查询方式中”|”和”&”不能同时使用。
五、区间查询:
ThinkPHP支持对某个字段的区间查询,例如:
$map[‘id’] = array(array(‘gt’,1),array(‘lt’,10));
查询条件:
(‘id’ >1) AND(‘id’<10)
$map[‘id’] = array(array(‘gt’,3),array(‘lt’,10),’or’);
查询条件:(‘id’>3)OR(‘id’<10)
$map[‘id’] = array( array(‘neq’,6),array(‘gt’,3),’and’);
查询条件:(‘id’ !=6)AND(‘id’>3)
区间查询的条件可以支持普通查询的所有表达式,也就是说类似LIKE、GT和EXP这样的表达式都可以支持。
另外区间查询还可以支持更多的条件,只要是针对一个字段的条件都可以写到一起,例如:
$map[‘name’] = array(array(‘like’,’%a%’),array(‘like’,’%b%’),array(%c%),’ThinkPHP’,’or’);
查询条件:
(‘name’ LIKE ‘%a%’)OR(‘name’ like ‘%b%’) OR (‘name’ like ‘%c%’) or(‘ThinkPHP’)
六、组合查询:
七、统计查询:
八、SQL查询:
九、动态查询:
十、子查询:
十一、总结:
ThinkPHP3快速入门教程三:查询语言的更多相关文章
- ThinkPHP3快速入门教程二:数据CURD
CURD(创建[Create].更新[Updata].读取[Read].删除[Delete]),定义了用于处理数据的基本原子操作. CURD在具体的应用中并非一定使用create.updata.rea ...
- ThinkPHP3快速入门教程-:基础
一.ThinkPHP的认识: ThinkPHP是一个快速.简单的基于MVC和面向对象的轻量级PHP开发框架. 二.下载后的目录结构: ├─ThinkPHP.php 框架入口文件 ├─Commo ...
- Jmeter 快速入门教程(三-3) -- 使用参数化
参数化:简单的来理解一下,我们录制了一个脚本,这个脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统. 这个时候就需要对用户名和密码进 ...
- Jmeter 快速入门教程(三-2) -- 设置集结点
集合点:简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点, 还拿那个用户和密码的地方,每到输入用户 ...
- Jmeter 快速入门教程(三-1) --添加响应断言(即loadrunner中所指的检查点)
[版权所有: whoistester.com & jmeter.cf] 上一节课,我们创建了一个测试场景,并进行了少量vuser的负载测试. 有时候我们执行了测试,但是发现并不是所有事务都执行 ...
- 3.Jmeter 快速入门教程(三-1) --添加响应断言(即loadrunner中所指的检查点)
上一节课,我们创建了一个测试场景,并进行了少量vuser的负载测试. 有时候我们执行了测试,但是发现并不是所有事务都执行成功了. 那是因为我们只是发起了测试,但并没有对每次请求测试的返回作校验. 所以 ...
- 4.Jmeter 快速入门教程(三-2) -- 设置集结点
集合点:简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点, 还拿那个用户和密码的地方,每到输入用户 ...
- ThinkPHP3.1快速入门教程
ThinkPHP3.1快速入门教程 http://www.thinkphp.cn/info/155.html ------------------------------------------- ...
- 专为设计师而写的GitHub快速入门教程
专为设计师而写的GitHub快速入门教程 来源: 伯乐在线 作者:Kevin Li 原文出处: Kevin Li 在互联网行业工作的想必都多多少少听说过GitHub的大名,除了是最大的开源项目 ...
随机推荐
- 最大连续子序列乘积(DP)
题目来源:小米手机2013年校园招聘笔试题 题目描述: 给定一个浮点数序列(可能有正数.0和负数),求出一个最大的连续子序列乘积. 输入: 输入可能包含多个测试样例.每个测试样例的第一行仅包含正整数 ...
- C++运算符重载
C++运算符重载 基本知识 重载的运算符是具有特殊名字的函数,他们的名字由关键字operator和其后要定义的运算符号共同组成. 运算符可以重载为成员函数和非成员函数.当一个重载的运算符是成员函数时, ...
- SQL Server SQL性能优化之--数据库在“简单”参数化模式下,自动参数化SQL带来的问题
数据库参数化的模式 数据库的参数化有两种方式,简单(simple)和强制(forced),默认的参数化默认是“简单”,简单模式下,如果每次发过来的SQL,除非完全一样,否则就重编译它(特殊情况会自动参 ...
- 浅析String不可变性
在所有编程语言领域,我想字符串应该是地球上最常用的表达手段了吧. 在java的世界里,String是作为类出现的,核心的一个域就是一个char数组,内部就是通过维护一个不可变的char数组,来向外部输 ...
- 利用简洁的图片预加载组件提升h5移动页面的用户体验
在做h5移动页面,相信大家一定碰到过页面已经打开,但是里面的图片还未加载出来的情况,这种问题虽然不影响页面的功能,但是不利于用户体验.抛开网速的原因,解决这个问题有多方面的思路:最基本的,要从http ...
- ASP.Net MVC Action重定向跳出Controller和Area
1.重定向方法简介 [HttpPost] public ActionResult StudentList( string StudName, string studName, DateTime Bir ...
- SQL 性能优化
当我看到sql执行很慢的时候就在想为什么这么慢? 不外乎数据大,sql语句复杂,没有索引. 如果要进行优化的话可以从对应的这三个问题出发: 看看表是否可以进行拆分成小表,拆分sql语句,建立适合的索引 ...
- HTML5 canvas 捕鱼达人游戏
在线试玩:http://hovertree.com/texiao/html5/33/ html5利用canvas写的一个js版本的捕鱼,有积分统计,鱼可以全方位移动,炮会跟着鼠标移动,第一次打开需要鼠 ...
- 谈I/O模型
一个IO操作涉及两个系统对象: 调用这个IO的用户Process/Thread 系统内核 - System Kernel 一个具体的Read操作包括两个阶段: 内核等待数据准备就绪:Waiting f ...
- MVC 自定义Htmlhelper扩展
在MVC中,我们不仅可以使用它原来的方法,我们还可以自定义,这不不仅加大了我们开发的效率,同时使界面更简洁. 具体什么是扩展方法,你可以这样理解,必须是静态且在形参中第一个参数是以this开头,大概先 ...