利用“|”和“&”简化查询

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)

用 | 和 & 简化查询的更多相关文章

  1. Expression Trees 参数简化查询

    ASP.NET MVC 引入了 ModelBinder 技术,让我们可以在 Action 中以强类型参数的形式接收 Request 中的数据,极大的方便了我们的编程,提高了生产力.在查询 Action ...

  2. ASP.NET MVC:Expression Trees 作为参数简化查询

    ASP.NET MVC 引入了 ModelBinder 技术,让我们可以在 Action 中以强类型参数的形式接收 Request 中的数据,极大的方便了我们的编程,提高了生产力.在查询 Action ...

  3. LinQ实战学习笔记(三) 序列,查询操作符,查询表达式,表达式树

    序列 延迟查询执行 查询操作符 查询表达式 表达式树 (一) 序列 先上一段代码, 这段代码使用扩展方法实现下面的要求: 取进程列表,进行过滤(取大于10M的进程) 列表进行排序(按内存占用) 只保留 ...

  4. oracle 10g 学习之多表查询、分组函数(6)

    笛卡尔集 l  笛卡尔集会在下面条件下产生: 省略连接条件 连接条件无效 所有表中的所有行互相连接 l  为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件. 自连接 select m.las ...

  5. thinkphp where()条件查询

    今天来给大家讲下查询最常用但也是最复杂的where方法,where方法也属于模型类的连贯操作方法之一,主要用于查询和操作条件的设置.where方法的用法是ThinkPHP查询语言的精髓,也是Think ...

  6. (转)MySQL数据表中带LIKE的字符匹配查询

    MySQL数据表中带LIKE的字符匹配查询 2014年07月15日09:56    百科369 MySQL数据表中带LIKE的字符匹配查询 LIKE关键字可以匹配字符串是否相等. 如果字段的值与指定的 ...

  7. Oracle_关联查询

    1. 等值连接(Equijoin).非等值连接(Non-Equijoin).外连接(Outer join):-->左外连接-->右外连接.自连接(Self join) 交叉连接(Cross ...

  8. THINKphp中复杂的查询

    字符串拼接查询 案例一:拼接字符串(多条件查询) $where = ''; //定义字符串,用于拼接满足条件的数据字段 $value = []; // 定义空数组,用于接收值 if(!empty($n ...

  9. ThinkPHP 数据库操作(四) : 聚合查询、时间查询、高级查询

    聚合查询 在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数.所有用户的最大积分.用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 用法示例: ...

随机推荐

  1. 在前后端分离项目中使用SpringBoot集成Shiro

    前言 这次在处理一个小项目时用到了前后端分离,服务端使用springboot2.x.权限验证使用了Shiro.前后端分离首先需要解决的是跨域问题,POST接口跨域时会预发送一个OPTIONS请求,浏览 ...

  2. 高并发 Nginx+Lua OpenResty系列(2)——Nginx Lua API

    Nginx Lua API 和一般的Web Server类似,我们需要接收请求.处理并输出响应.而对于请求我们需要获取如请求参数.请求头.Body体等信息:而对于处理就是调用相应的Lua代码即可:输出 ...

  3. Spring 注解编程之模式注解

    Spring 框架中有很多可用的注解,其中有一类注解称模式注解(Stereotype Annotations),包括 @Component, @Service,@Controller,@Reposit ...

  4. eclipse中junit简单使用

    1.在工程中右击 Build Path,Add libraries 然后就可以运行对应的方法了,不需要main方法调用了

  5. Google浏览器插件之闪存过滤器

    一件很有意思的事情引发的无聊尝试. 博客园有个很有趣的功能,就是闪存,翻阅到07年园长对闪存的定义:      记录一闪而过的想法,高兴或者不高兴都可以发一下.我用这个一直以来的想法就是,想到点啥发点 ...

  6. SQL 对float类型列进行排序引发的异常

    车祸现场 要求:根据学分和完成时间获取前200名学员,当学分相同时,完成时间较早的排在前面 可以明显看到,完成时间为4.1号的记录排在了3.27号前面. 事故原因 float 表示近似数值,存在精度损 ...

  7. 1. VMware搭建Linux环境,安装配置centos6.5

    1. 安装VMware,后新建虚拟机 2. 为我们的虚拟机挂载操作系统 3.开启我们的虚拟机,为我们的虚拟机进行安装操作系统 4.配置虚拟机连接网络 修改linux的mac地址 修改mac地址配置文件 ...

  8. oracle group by 显示其他字段

    原先用 select key,max(value) from tbl group by key 查询出的结果,但是我要再多加一个TEST字段 根据网友的语句结合起来,以下是可以显示其他字段,并且考虑排 ...

  9. Keep It Simple

    The KISS principle, or Keep It Simple, Stupid, spans many trades, industries, and professions. The m ...

  10. 为什么Python 3.6以后字典有序并且效率更高?

    在Python 3.5(含)以前,字典是不能保证顺序的,键值对A先插入字典,键值对B后插入字典,但是当你打印字典的Keys列表时,你会发现B可能在A的前面. 但是从Python 3.6开始,字典是变成 ...