用 | 和 & 简化查询
利用“|”和“&”简化查询
1.多个字段相同查询条件下用“&”处理
例如该情况:
$model = M('Test');
$cond['T_StringA'] = 'test';
$cond['T_StringB'] = 'test';
$returnData = $model->where($cond)->select();
这样的写法下,查询条件最终的执行的sql是:
SELECT * FROM `test` WHERE `T_StringA` = `test` AND `T_StringB` = `test`;
是直接将两个条件用“And”连接起来,返回最终数据是表数据中同时满足两个条件的值。
在条件较少,以及条件的内容较简单时,用这样的方法写起来的代码也不会很长,但如果你对代码长度有要求的话,用’&‘直接在查询条件的字段中拼接的话,就更为简便了。
例如该情况,查询字段较多时
$model = M('Test');
$cond['T_StringA'] = 'test';
$cond['T_StringB'] = 'test';
$cond['T_StringC'] = 'test';
$cond['T_StringD'] = 'test';
$returnData = $model->where($cond)->select();
$cond 直接用一下写法就可。
$cond['T_StringA&T_StringB&T_StringC&T_StringD'] = 'test';
$returnData = $model->where($cond)->select();
这样的写法下,查询条件最终的执行的sql是:
SELECT * FROM `test` WHERE `T_StringA` = `test` AND `T_StringB` = `test` AND `T_StringC` = `test` AND `T_StringD` = `test`;
实际上和你想要的效果是一样的,只是说有需要的话,做个简单的处理,会少些一些代码。当然这样的场景应该也不会很多的。那如果是用在多表链接查询时,就不建议用该方法了,消耗太大。
但是如果你是想获取满足该条件中的一个的数据,那就得用"OR"
2.多个字段不相同查询条件下用“|”处理
$model = M('Test');
$cond['T_StringA'] = 'test';
$cond['T_StringB'] = 'test';
$cond['_logic'] = 'OR';
$returnData = $model->where($cond)->select();
<br>
这样的写法下,查询条件最终的执行的sql是:
SELECT * FROM `test` WHERE `T_StringA` = `test` OR `T_StringB` = `test`;
以前我还用过这样的方式拼接过,执行的sql时一样的啦,只是自己做的拼接,哈哈,不过是很low的啦。
$model = M('Test');
$cond['_string'] = ' T_StringA=\''.'test'.'\' OR T_StringB=\''.'test'.'\'';
$returnData = $model->where($cond)->select();
如下用“|”处理,会少几行代码了
$model = M('Test');
$cond['T_StringA'] = 'test';
$cond['T_StringB'] = 'test';
$cond['T_StringC'] = 'test';
$cond['T_StringD'] = 'test';
$returnData = $model->where($cond)->select();
$cond 也是同上直接用一下写法就可。
$cond['T_StringA|T_StringB'] = 'test';
$returnData = $model->where($cond)->select();
3.其实 && 和 || 在PHP中很多场景都会用到,类似于做条件判断,就利用它们的原理来代替if判断,会简洁许多。
if ($test) {
$cond['T_StringA'] = $test;
}
$test && $cond['T_StringA'] = $test;
顺便提一下,PHP 中 AND 和 OR ,&& 和 || 之间,本身代表的意思是没有区别的,但是有时候会涉及到运算符优先级。在网上看到一个例子如下:
因为赋值运算的优先级比AND和OR的高,所以先赋值;比&&和||的低,所以逻辑运算符先执行,先逻辑运算,再赋值。
<br>
$p = 6 or 0;
var_dump($p);//int(6)
$p = 6 || 0;
var_dump($p);//bool(true)
$p = 6 and 0;
var_dump($p); //int(6)
$p = 6 && 0;
var_dump($p); //bool(false)
用 | 和 & 简化查询的更多相关文章
- Expression Trees 参数简化查询
ASP.NET MVC 引入了 ModelBinder 技术,让我们可以在 Action 中以强类型参数的形式接收 Request 中的数据,极大的方便了我们的编程,提高了生产力.在查询 Action ...
- ASP.NET MVC:Expression Trees 作为参数简化查询
ASP.NET MVC 引入了 ModelBinder 技术,让我们可以在 Action 中以强类型参数的形式接收 Request 中的数据,极大的方便了我们的编程,提高了生产力.在查询 Action ...
- LinQ实战学习笔记(三) 序列,查询操作符,查询表达式,表达式树
序列 延迟查询执行 查询操作符 查询表达式 表达式树 (一) 序列 先上一段代码, 这段代码使用扩展方法实现下面的要求: 取进程列表,进行过滤(取大于10M的进程) 列表进行排序(按内存占用) 只保留 ...
- oracle 10g 学习之多表查询、分组函数(6)
笛卡尔集 l 笛卡尔集会在下面条件下产生: 省略连接条件 连接条件无效 所有表中的所有行互相连接 l 为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件. 自连接 select m.las ...
- thinkphp where()条件查询
今天来给大家讲下查询最常用但也是最复杂的where方法,where方法也属于模型类的连贯操作方法之一,主要用于查询和操作条件的设置.where方法的用法是ThinkPHP查询语言的精髓,也是Think ...
- (转)MySQL数据表中带LIKE的字符匹配查询
MySQL数据表中带LIKE的字符匹配查询 2014年07月15日09:56 百科369 MySQL数据表中带LIKE的字符匹配查询 LIKE关键字可以匹配字符串是否相等. 如果字段的值与指定的 ...
- Oracle_关联查询
1. 等值连接(Equijoin).非等值连接(Non-Equijoin).外连接(Outer join):-->左外连接-->右外连接.自连接(Self join) 交叉连接(Cross ...
- THINKphp中复杂的查询
字符串拼接查询 案例一:拼接字符串(多条件查询) $where = ''; //定义字符串,用于拼接满足条件的数据字段 $value = []; // 定义空数组,用于接收值 if(!empty($n ...
- ThinkPHP 数据库操作(四) : 聚合查询、时间查询、高级查询
聚合查询 在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数.所有用户的最大积分.用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 用法示例: ...
随机推荐
- 快速开发平台 WebBuilder 8.4 发布
WebBuilder是一款强大,全面和高效的应用开发和运行平台.基于浏览器的集成开发环境,可视化和智能化的设计,能轻松完成常规应用和面向手机的移动应用开发.高效.稳定和可扩展的特点,适合复杂企业级应用 ...
- springmvc登录拦截jsp页面
web.xml配置 <filter> <filter-name>LoginFilter</filter-name> //编写拦截的类的全类名 <filter- ...
- Python之二叉树Binarytree
二叉树是树的简化版,除根节点之外的所有节点都有一个父节点,任意节点都可以最多有一个左子节点和右子节点. 二叉树的遍历是非常重要的算法,主要分为深度优先遍历和广度优先遍历. 其中深度优先遍历按照访问根节 ...
- C语言指针学习总结
上学的时候学习C语言,最烦的就是里面指针,可是指针也恰恰是C语言的灵魂. 最近在重温数据结构的内容,因为大多数据结构的教材都是用C语言描述的,而数据结构中也大量的用到了指针的内容,所以我就在这篇笔记中 ...
- SpringBoot从入门到精通一(idea优雅搭建SpringBoot项目)
前言 在没有SpringBoot之前,我们搭建的是SSM(SpingMVC+Spring+Mybatis)项目,在搭建SSM项目的时候,我们要经过一系列的繁琐配置,例如:application,web ...
- 【Go】使用压缩文件优化io (一)
原文连接:https://blog.thinkeridea.com/201906/go/compress_file_io_optimization1.html 最近遇到一个日志备份 io 过高的问题, ...
- 使用docker运行GitLab
从docker镜像拉取代码,docker pull gitlab/gitlab-ce:latest. 创建/srv/gitlab目录sudo mkdir /srv/gitlab 启动GitLab CE ...
- Ruby中的常量:引号、%符号和heredoc
数值字面量 没什么好说的,唯一需要说明的是分数字面量:数值后加上一个后缀字母r表示分数字面量. # 整数字面量 0 1 100 10_000_001 # 千分位 # 浮点数字面量 0.1 1.0 1. ...
- 多语言应用性能监控系统:Elastic APM
▶ 概述 Elastic APM 是基于 Elastic Stack 构建的应用性能监控系统.通过 Elastic APM 可以监控应用程序,收集有关请求的响应时间.数据库查询.高速缓存调用.外部 H ...
- Analysis of requirement specification of parking management system
Analysis of requirement specification of parking management system PURPOSE OF THE SYSTEM The parking ...