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查询:

九、动态查询:

十、子查询:

十一、总结:

时间: 2024-12-15 07:49:30

ThinkPHP3快速入门教程三:查询语言的相关文章

ThinkPHP3快速入门教程-:基础

一.ThinkPHP的认识: ThinkPHP是一个快速.简单的基于MVC和面向对象的轻量级PHP开发框架. 二.下载后的目录结构: ├─ThinkPHP.php     框架入口文件 ├─Common 框架公共文件 ├─Conf 框架配置文件 ├─Extend 框架扩展目录 ├─Lang 核心语言包目录 ├─Lib 核心类库目录 │  ├─Behavior 核心行为类库 │  ├─Core 核心基类库 │  ├─Driver 内置驱动 │  │  ├─Cache 内置缓存驱动 │  │  ├─

ThinkPHP3快速入门教程二:数据CURD

CURD(创建[Create].更新[Updata].读取[Read].删除[Delete]),定义了用于处理数据的基本原子操作. CURD在具体的应用中并非一定使用create.updata.read.delete字样的方法,但是他们完成的功能是一致的. 例如: ThinkPHP就是使用add.save.select和delete方法表示模型的CURD操作. 一.创建数据 CURD的Create操作通常会通过表单来提交数据,首先,我们在项目的Tpl/Form目录下面创建一个add.html模板

Jmeter 快速入门教程(三-3) -- 使用参数化

参数化:简单的来理解一下,我们录制了一个脚本,这个脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统. 这个时候就需要对用户名和密码进行参数化,使每个虚拟用户都使用不同的用户名和密码进行访问. 前提: 假如,我们录制好了一个脚本(可以用badboy工具录制),在jmeter中打开,找到有用户名和密码的页面.如下: 1. 我们需要“参数化”的数据,这里我用记事本写了五个用户名和密码,保存为.dat格式的文件. 我将这个文件放在了我的

Jmeter 快速入门教程(三-2) -- 设置集结点

集合点:简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点, 还拿那个用户和密码的地方,每到输入用户名和密码登录的地方,所有的虚拟用户都相互之间等一等,然后,一起访问.(红军排长说:等一等!大家一起冲啊!这样给敌人的压力是很大的.嘻嘻!) 1. 接着之前创建的脚本,右键点击 step1---->定时器---->Synchronizing Timer 这样子就添加了一个“集合点”,下面来设置一下集

ThinkPHP3.1快速入门教程

ThinkPHP3.1快速入门教程 http://www.thinkphp.cn/info/155.html --------------------------------------------------------------------- ThinkPHP 3.1 完全开发手册 http://doc.thinkphp.cn/manual/

Velocity快速入门教程

Velocity快速入门教程-脚本语法详解(转) 1.变量 (1)变量的定义: #set($name = "hello")      说明:velocity中变量是弱类型的. 当使用#set 指令时,括在双引号中的字面字符串将解析和重新解释,如下所示: #set($directoryRoot = "www" ) #set($templateName = "index.vm" ) #set($template = "$directoryR

专为设计师而写的GitHub快速入门教程

原文出处: Kevin Li 在互联网行业工作的想必都多多少少听说过GitHub的大名,除了是最大的开源项目托管平台,许多企业也都是用GitHub来协同开发工作,当然我 们彩程也是其中之一.笔者最初决定学习Git也是因为在团队内部设计方案初步被开发出来后,难免会有一些细节需要调整,而为了调整几像素的问题再求前端工 程师出马,其实是很影响整体效率的,所以希望通过学习GitHub好在必要的时候直接参与开发,能发挥自己的一点CSS技术以更直接快速的解决问题. 但是期间竟然发现网上无一篇为设计师而备的G

BootStrap入门教程 (三)

上讲回顾:Bootstrap的基础CSS(Base CSS)提供了优雅,一致的多种基础Html页面要素,包括排版,表格,表单,按钮等,能够满足前端工程师的基本要素需求. Bootstrap作为完整的前端工具集,内建了大量的强大优雅可重用的组件,包括按钮(Button),导航(Navigation),标签(Labels),徽章(Badges),排版(Typography),缩略图( thumbnails),提醒(Alert),进度条(progress bar),杂项(Miscellaneous).

指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程

指示灯组与3个复位按钮的介绍Arduino Yun快速入门教程 1.4.2  指示灯组 指示灯组的放大图如图1.5所示. 图1.5  指示灯组 各个指示灯对应的功能如下: q  RX:对应于0号端口,串行通讯的接收指示,在接收数据时闪烁: q  TX:对应于1号端口,串行通讯的发送提示,在发送数据时闪烁: q  L13:连接在13号端口,当13号端口为高电平时被点亮: q  WAN:有线网络连接指示,在网线有数据交换的时候点亮: q  ON:电源指示: q  WLAN:WIFI指示,同时也可以用