tp5.1 框架查询表达式用法详解


Posted in PHP onMay 25, 2020

本文实例讲述了tp5.1 框架查询表达式用法。分享给大家供大家参考,具体如下:

查询表达式

查询表达式支持大部分的SQL查询语法,也是ThinkPHP查询语言的精髓,查询表达式的使用格式:

where('字段名','表达式','查询条件');
whereOr('字段名','表达式','查询条件');

5.1还支持新的查询方法

whereField('表达式','查询条件');
whereOrField('表达式','查询条件');

Field使用字段的驼峰命名方式。

表达式不分大小写,支持的查询表达式有下面几种:

表达式 含义 快捷查询方法
= 等于  
不等于  
> 大于  
>= 大于等于  
小于  
小于等于  
[NOT] LIKE 模糊查询 whereLike/whereNotLike
[NOT] BETWEEN (不在)区间查询 whereBetween/whereNotBetween
[NOT] IN (不在)IN 查询 whereIn/whereNotIn
[NOT] NULL 查询字段是否(不)是NULL whereNull/whereNotNull
[NOT] EXISTS EXISTS查询 whereExists/whereNotExists
[NOT] REGEXP 正则(不)匹配查询(仅支持Mysql)  
[NOT] BETWEEM TIME 时间区间比较 whereBetweenTime
> TIME 大于某个时间 whereTime
小于某个时间 whereTime
>= TIME 大于等于某个时间 whereTime
小于等于某个时间 whereTime
EXP 表达式查询,支持SQL语法 whereExp

表达式查询的用法示例如下:

等于(=)

例如:

Db::name('user')->where('id','=',100)->select();

和下面的查询等效

Db::name('user')->where('id',100)->select();

最终生成的SQL语句是:

SELECT * FROM `think_user` WHERE `id` = 100

不等于(<>)

例如:

Db::name('user')->where('id','<>',100)->select();

最终生成的SQL语句是:

SELECT * FROM `think_user` WHERE `id` <> 100

大于(>)

例如:

Db::name('user')->where('id','>',100)->select();

最终生成的SQL语句是:

SELECT * FROM `think_user` WHERE `id` > 100

大于等于(>=)

例如:

Db::name('user')->where('id','>=',100)->select();

最终生成的SQL语句是:

SELECT * FROM `think_user` WHERE `id` >= 100

小于(<)

例如:

Db::name('user')->where('id','<',100)->select();

最终生成的SQL语句是:

SELECT * FROM `think_user` WHERE `id` < 100

小于等于(<=)

例如:

Db::name('user')->where('id','<=',100)->select();

最终生成的SQL语句是:

SELECT * FROM `think_user` WHERE `id` <= 100

[NOT] LIKE: 同sql的LIKE

例如:

Db::name('user')->where('name','like','thinkphp%')->select();

最终生成的SQL语句是:

SELECT * FROM `think_user` WHERE `name` LIKE 'thinkphp%'

like查询支持使用数组

Db::name('user')->where('name','like',['%think','php%'],'OR')->select();

实际生成的SQL语句为:

SELECT * FROM `think_user` 
WHERE (`name` LIKE '%think' OR `name` LIKE 'php%')

为了更加方便,应该直接使用whereLike方法

Db::name('user')->whereLike('name','thinkphp%')->select();
Db::name('user')->whereNotLike('name','thinkphp%')->select();

[NOT] BETWEEN :同sql的[not] between

查询条件支持字符串或者数组,例如:

Db::name('user')->where('id','between','1,8')->select();

和下面的等效:

Db::name('user')->where('id','between',[1,8])->select();

最终生成的SQL语句都是:

SELECT * FROM `think_user` WHERE `id` BETWEEN 1 AND 8

最快捷的查询方法是:

Db::name('user')->whereBetween('id','1,8')->select();
Db::name('user')->whereNotBetween('id','1,8')->select();

[NOT] IN: 同sql的[not] in

查询条件支持字符串或者数组,例如:

Db::name('user')->where('id','in','1,5,8')->select();

和下面的等效:

Db::name('user')->where('id','in',[1,5,8])->select();

最终的SQL语句为:

SELECT * FROM `think_user` WHERE `id` IN (1,5,8)

最快捷的查询方法是:

Db::name('user')->whereIn('id','1,5,8')->select();
Db::name('user')->whereNotIn('id','1,5,8')->select();

 

[NOT] IN查询支持使用闭包方式

[NOT] NULL :

查询字段是否(不)是Null,例如:

Db::name('user')->where('name', null)
->where('email','null')
->where('name','not null')
->select();

实际生成的SQL语句为:

SELECT * FROM `think_user` 
WHERE `name` IS NULL 
AND `email` IS NULL 
AND `name` IS NOT NULL

如果你需要查询一个字段的值为字符串null或者not null,应该使用:

Db::name('user')->where('title','=', 'null')
->where('name','=', 'not null')
->select();

推荐的方式是使用whereNullwhereNotNull方法查询。

Db::name('user')->whereNull('name')
->whereNull('email')
->whereNotNull('name')
->select();

EXP:表达式

支持更复杂的查询情况 例如:

Db::name('user')->where('id','in','1,3,8')->select();

可以改成:

Db::name('user')->where('id','exp',' IN (1,3,8) ')->select();

exp查询的条件不会被当成字符串,所以后面的查询条件可以使用任何SQL支持的语法,包括使用函数和字段名称。

动态查询

对于上面的查询表达式,可以使用动态查询方法进行简化,例如:

Db::name('user')->where('id','>=',100)->select();

可以简化为:

Db::name('user')->whereId('>=',100)->select();

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
使用php shell命令合并图片的代码
Jun 23 PHP
php编程实现获取excel文档内容的代码实例
Jun 28 PHP
PHP 获取远程文件大小的3种解决方法
Jul 11 PHP
php 不使用js实现页面跳转
Feb 11 PHP
Yii Framework框架获取分类下面的所有子类方法
Jun 20 PHP
php实现TCP端口检测的方法
Apr 01 PHP
php实现按天数、星期、月份查询的搜索框
May 02 PHP
php简单解析mysqli查询结果的方法(2种方法)
Jun 29 PHP
浅谈PHP表单提交(POST&amp;GET&amp;URL编/解码)
Apr 03 PHP
php lcg_value与mt_rand生成0~1随机小数的效果对比分析
Apr 05 PHP
php分页查询mysql结果的base64处理方法示例
May 18 PHP
tp5.1 框架数据库高级查询技巧实例总结
May 25 PHP
tp5.1 框架数据库高级查询技巧实例总结
May 25 #PHP
thinkphp5.1 框架导入/导出excel文件操作示例
May 25 #PHP
thinkphp5.1框架模板赋值与变量输出示例
May 25 #PHP
thinkphp5.1 框架钩子和行为用法实例分析
May 25 #PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 #PHP
php7 错误处理机制修改实例分析
May 25 #PHP
php7 list()、session及其他模块的修改实例分析
May 25 #PHP
You might like
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
php链式操作的实现方式分析
2019/08/12 PHP
Input 特殊事件onpopertychange和oninput
2009/06/17 Javascript
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
js判断当页面无法回退时关闭网页否则就history.go(-1)
2014/08/07 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
js中for in语句的用法讲解
2015/04/24 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
ionic js 模型 $ionicModal 可以遮住用户主界面的内容框
2016/06/06 Javascript
JavaScript中push(),join() 函数 实例详解
2016/09/06 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
2017/03/14 Javascript
webpack 单独打包指定JS文件的方法
2018/02/22 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
2020/11/27 Vue.js
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python批量导出导入MySQL用户的方法
2013/11/15 Python
Python操作列表的常用方法分享
2014/02/13 Python
python使用itchat模块给心爱的人每天发天气预报
2019/11/25 Python
Python中顺序表原理与实现方法详解
2019/12/03 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
ktv总经理岗位职责
2014/02/17 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书
2014年就业工作总结
2014/11/26 职场文书
2014年小学教研工作总结
2014/12/06 职场文书
学校德育工作总结2015
2015/05/11 职场文书
民事答辩状格式范文
2015/05/21 职场文书
教师纪律作风整顿心得体会
2016/01/23 职场文书